Django AuthenticationForm是否正在使用“”进行身份验证?

Django AuthenticationForm是否正在使用“”进行身份验证?,django,django-forms,Django,Django Forms,当我在登录视图中使用AuthenticationForm时,我发现当我检查form.is\u valid()时,如果用户凭据不正确,它将返回False。我认为是有效的()是基于表单类的验证条件而不是通过实际执行数据库查询来检查有效性的。我错了吗 以下是一个简单的登录视图示例: def login_form(request): if request.method == 'POST': form = AuthenticationForm(request, data=reque

当我在登录视图中使用
AuthenticationForm
时,我发现当我检查
form.is\u valid()
时,如果用户凭据不正确,它将返回
False
。我认为
是有效的()
是基于表单类的验证条件而不是通过实际执行数据库查询来检查有效性的。我错了吗

以下是一个简单的登录视图示例:

def login_form(request):
    if request.method == 'POST':
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=email, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, f"Welcome back {request.user.first_name}.")
                return redirect('home')
            else:
                messages.error(request, "Why is this not returned for invalid creds?")
        else:
            messages.error(request, "This is returned for invalid creds.")
    else:
        form = AuthenticationForm()
    return render(request, 'login.html', {'form': form})
form.is\u valid()。我认为当我们
authenticate()
时,它将返回
True
,而
user
将是
None


验证用户凭据是否有效()?请提供参考。

是的,它会尝试
验证。以下是它测试的内容:

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(
                self.error_messages['invalid_login'],
                code='invalid_login',
                params={'username': self.username_field.verbose_name},
            )
        else:
            self.confirm_login_allowed(self.user_cache)

    return self.cleaned_data