django - 如何重构我的 Django 代码?
问题描述
我是 Django 的新手。我想创建一个应用程序,使选定的用户能够登录,然后上传稍后处理的文件。
模型.py
class Profile(models.Model):
username = models.OneToOneField(User, on_delete=models.CASCADE)
password = models.TextField(max_length=80,blank=True)
company = models.TextField(max_length=80, blank=True)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
class Document(models.Model):
uploaded_by = models.ForeignKey(Profile,on_delete=models.CASCADE)
date_uploaded = models.DateTimeField(auto_now_add=True)
表格.py
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
company = forms.CharField()
class DocumentForm(forms.Form):
docfile = forms.FileField(label='Select a file')
malex.urls(应用程序网址)
from malex.views import list
from malex.views import login
urlpatterns = [
url(r'^list/$', list, name='list'),
url(r'^login/$', login, name='login'),
]
项目/网址
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^newp/', include('malex.urls')),
]
视图.py
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(user=cd['user'],password=cd['password'],company=cd['company'])
if user is not None:
if user is active:
login(request,user)
return HttpResponse('Authenticated successfully')
else:
return HttpResponse('Disabled account')
else:
return HttpResponse('Invalid login')
else:
form=LoginForm()
return render(request,'account/login.html',{'form': form})
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('list'))
现在登录和上传操作是分开的。如何更改我的视图和网址以先登录然后上传?我是否需要将基于类的视图与装饰器一起使用?
解决方案
创建自定义登录表单和视图。
使用您的 localhost:8000 地址作为登录模板
(app) urlpatterns = [path('',views.loginview,name = 'login')]
(project) urlpatterns = [path('', include('malex.urls')),)]
使用扩展您的登录模板
{% block content %}{% endblock %}
在模板或视图中使用通过限制
{% if request.user.is_authenticated %}
让他们访问upload section
。
推荐阅读
- python - 安全地将附加属性修补到 Django HttpRequest
- javascript - 为什么单击 iframe 上的 x 时无法暂停视频
- javascript - 删除 b Javascript 中存在的 a 中的元素
- notepad++ - 如何在 Notepad++ 中的 HTML 属性名称后自动插入等号 (=) 和双引号 ("")?
- python - 将 1H 蜡烛数据的 pandas 数据帧重采样为 4H
- database - Odoo - 如何使用 OpenUpgrade 将数据库从 Odoo 12 迁移到 14
- javascript - 将特定键的数据从 javascript 传递给 vue
- python - 在 Python 中使用 super() 进行干燥
- swiftui - 如何在 SwiftUI 中触发状态更改/重绘切换更改
- regex - 无法理解 Perl 正则表达式替换行为