如何重新构造Django代码?
我是Django的新手。我想创建一个应用程序,让选定的用户能够登录,然后上传文件,然后再进行处理 models.py如何重新构造Django代码?,django,Django,我是Django的新手。我想创建一个应用程序,让选定的用户能够登录,然后上传文件,然后再进行处理 models.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_l
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)
forms.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.url(应用程序URL)
项目/URL
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^newp/', include('malex.urls')),
]
views.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'))
现在,登录和上载操作是分开的。
如何更改我的视图和URL,使其先登录,后上传?
我是否需要对装饰器使用基于类的视图
(app)urlpatterns=[路径(“”,views.loginview,name='login')]
(项目)urlpatterns=[path(“”,include('malex.url'),)]
{%block content%}{%endblock%}
{%if request.user.is_authenticated%}
,允许他们访问上载部分
(app)urlpatterns=[路径(“”,views.loginview,name='login')]
(项目)urlpatterns=[path(“”,include('malex.url'),)]
{%block content%}{%endblock%}
{%if request.user.is_authenticated%}
,允许他们访问上载部分
你的想法听起来很好,只是我似乎在两个视图函数上犯了一个错误。重构代码似乎不是那么容易。你有没有遇到任何错误,或者想完全重构代码?你的views.py代码很好,你只需要调整你的
url
和templates
就可以得到想要的结果。你的想法听起来很好,只是我似乎在两个视图函数上犯了一个错误。重构代码似乎不是那么容易。你有没有遇到任何错误,或者想完全重构代码?您的views.py代码很好,只需调整url
和模板即可获得所需的结果。
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'))