在Django中使用AuthenticationForm

时间:2011-12-07 19:22:20

标签: django django-forms

我正在尝试使用带有django的AuthenticationForm表单,并发现我似乎无法获得要验证的表单。我把它弄成一个简单的测试(假设它是正确的)似乎不起作用。谁能在这里看到问题?

>>> from django.contrib.auth.forms import AuthenticationForm
>>> POST = { 'username': 'test', 'password': 'me', }
>>> form = AuthenticationForm(POST)
>>> form.is_valid()
False

是否有真正的原因无法验证?我使用不正确吗?我基本上是在django自己的登录视图之后建模的。

3 个答案:

答案 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退出用户