直截了当,我是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。
感谢所有的鱼!
答案 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
。