如何重新构造Django代码?

如何重新构造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

我是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_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,使其先登录,后上传? 我是否需要对装饰器使用基于类的视图

  • 创建自定义登录表单和视图

  • 使用您的localhost:8000地址作为登录模板

    (app)urlpatterns=[路径(“”,views.loginview,name='login')]

    (项目)urlpatterns=[path(“”,include('malex.url'),)]

  • 使用
    {%block content%}{%endblock%}

  • 在模板或视图中使用传递限制
    {%if request.user.is_authenticated%}
    ,允许他们访问
    上载部分

  • 创建自定义登录表单和视图

  • 使用您的localhost:8000地址作为登录模板

    (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'))