子类LoginView时,Django'NoneType'对象没有属性'has_header'

时间:2018-10-16 11:12:41

标签: python django django-views

直截了当,我是python的新手,我想尝试在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'

这与某种响应对象有关。精确地:

django\lib\site-packages\django\utils\cache.py in patch_response_headers, line 243

Django的版本为2.1.2。

感谢所有的鱼!

2 个答案:

答案 0 :(得分:1)

您需要返回调用super的结果。

return super().form_valid(form)

答案 1 :(得分:1)

在表单有效的情况下,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,或者例如在返回响应之前先对其进行“后处理”,但是无论合同是{{ 1}}应该返回form_valid

相关问题