我正在尝试使用带有django的AuthenticationForm表单,并发现我似乎无法获得要验证的表单。我把它弄成一个简单的测试(假设它是正确的)似乎不起作用。谁能在这里看到问题?
>>> from django.contrib.auth.forms import AuthenticationForm
>>> POST = { 'username': 'test', 'password': 'me', }
>>> form = AuthenticationForm(POST)
>>> form.is_valid()
False
是否有真正的原因无法验证?我使用不正确吗?我基本上是在django自己的登录视图之后建模的。
答案 0 :(得分:45)
尝试:
form = AuthenticationForm(data=request.POST)
答案 1 :(得分:18)
花了几个小时后发现“为什么hack没有验证错误?!”我遇到了这个页面:http://www.janosgyerik.com/django-authenticationform-gotchas/
AuthenticationForm的第一个参数不是 数据 !在所有:
def __init__(self, request=None, *args, **kwargs):
这就是为什么你必须将 req.POST 传递给数据或在第一个参数中传递其他内容。已经在其中一个答案中说明了使用:
AuthenticationForm(data=req.POST)
您还可以使用以下方法之一:
AuthenticationForm(req,req.POST)
AuthenticationForm(None,req.POST)
答案 2 :(得分:2)
is_valid函数的代码:
return self.is_bound and not bool(self.errors)
>>> form.errors
{'__all__': [u'Please enter a correct username and password. Note that both fields are case-sensitive.']}
如果您看到方法代码清除AuthenticationForm
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
if username and password:
self.user_cache = authenticate(username=username, password=password)
if self.user_cache is None:
raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive."))
elif not self.user_cache.is_active:
raise forms.ValidationError(_("This account is inactive."))
self.check_for_test_cookie()
return self.cleaned_data
“问题”是不会使用此用户名和passowrd退出用户