如何解决Django AuthenticationForm是否通过is_valid进行身份验证?
当我在登录视图中使用AuthenticationForm
时,我发现当我检查form.is_valid()
时,如果用户凭据不正确,它将返回False
。我认为is_valid()
是根据表单类的验证标准而不是通过实际执行数据库查询来检查有效性的。我不正确吗?
例如,这是一个简单的登录视图:
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_valid()
将返回False
。我认为它将返回True
,而当我们user
时None
将是authenticate()
。
is_valid()
是否在验证用户凭据?请提供参考。
解决方法
是的,它确实尝试authenticate
。这是它测试的内容:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。