问题描述
我使用默认的 Django AuthenticationForm() 作为用户登录功能。现在,当我在 Django admin 中看到用户模型内部时,它包含用户名、电子邮件地址、名字姓氏和活动状态等字段。
但是在我的 sign-in.html 页面我只能访问 form.username 和 form.password,而不能访问 form.email 和 form.first_name??
我的观点:
def login(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
authlog(request,user)
return redirect('home')
else:
messages.error(request,'Invalid username or password')
# back_page = request.Meta.get('HTTP_REFERER')
return redirect('login')
# messages.error(request,student_form.errors,'Incorrect')
# return HttpResponse(back_page)
else:
content = {
'form': AuthenticationForm()
}
return render(request,'sign-in.html',content)
<div class="input-group">
<span class="input-group-text" id="basic-addon1"><span class="fas fa-envelope"></span></span>
{{form.emailaddress}}
</div>
<div class="input-group">
<span class="input-group-text" id="basic-addon2"><span class="fas fa-unlock-alt"></span></span>
{{form.password}}
</div>
在这里我可以访问 form.password 和 form.username 但无法使用电子邮件地址登录。但我们知道我们也应该能够使用电子邮件地址登录。
解决方法
身份验证表单只有用户名和密码字段。因此您无法访问任何其他字段,因为它们未定义。
如果您需要身份验证表单上的其他字段,您可以按照 in the documentation 所述在您的设置中更改 USERNAME_FIELD。
如果您确实需要更复杂的东西,您也可以编写全新的身份验证表单。