首页 > 解决方案 > 子类LoginView时,Django'NoneType'对象没有属性'has_header'

问题描述

我想在 django 上尝试自定义登录,并想在登录前处理一些表单数据。我出去了:

class mylogin(auth_views.LoginView):
    def form_valid(self, form):
        print("datas :D!", form.cleaned_data['password'])
        super().form_valid(form)

所有其他的东西都应该是 LoginView 的东西。所以,在我的 urls.py 我有:

path('login/', views.mylogin.as_view(template_name='public/login.html'), name='login'),

错误,当我尝试登录时:

AttributeError: 'NoneType' object has no attribute 'has_header'

标签: pythondjangodjango-views

解决方案


如果表单有效,FormMixin.form_valid[Django-doc]函数应该返回一个HttpResponse对象。

在这里你调用了这个super().form_valid(form)函数,但你没有返回HttpResponse它生成的,因此你应该添加一个return语句:

class mylogin(auth_views.LoginView):

    def form_valid(self, form):
        print("datas :D!", form.cleaned_data['password'])
        return super().form_valid(form)

您当然也可以决定HttpResponse在您的form_valid函数中构造 a ,或者例如在返回响应之前首先“后处理”响应,但无论如何,合同form_valid应该返回 a HttpResponse


推荐阅读