我正在扩展 Django 的 AuthenticationForm 以便为用户提供更好的错误消息。如果登录将失败,我想对用户的输入进行额外检查,以提供一条不太通用的消息,向用户解释登录失败的原因。
网址:py:
urlpatterns = patterns(
'django.contrib.auth.views',
url(r'^login/$', 'login', {'authentication_form': RemoteLoginAwareLoginForm}, name='auth_login'),
)
表格.py:
class RemoteLoginAwareLoginForm(AuthenticationForm):
def clean(self):
cleaned_data = super(AuthenticationForm, self).clean()
if self.errors: # <==== self.errors is {}, even when login will fail
# Perform additional checks
return cleaned_data
我认为正确的方法是像上面那样覆盖 clean() ,但如前所述,即使我使用错误的凭据登录,self.errors 也是空的。我也尝试覆盖 full_clean() 和 validate() ,但都没有被调用。
更新:
我意识到我正在寻找的错误 - 凭据无效 - 直到代码实际尝试登录用户时才会出现。我添加了一个自定义 ModelBackend ,我可以在其中捕获错误。 ..但我不确定如何报告它,因为这里没有请求。
答案是否需要自定义登录视图?
谢谢!