我试图创建自己的自定义登录页面来测试我的django技能,但它永远不会工作。我的观点:
def login_view(request):
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
email = form.cleaned_data.get('email')
password = form.cleaned_data.get('password')
user = authenticate(email=email, password=password)
if user:
login(request, user)
redirect('/account/')
else:
print(str(password)+" "+str(email))
else:
form = LoginForm()
return render(request, 'users/login.html',{'form': form})
我的表格
class LoginForm(forms.Form):
email = forms.CharField(
widget=forms.TextInput(attrs={'class': 'registerforms', 'placeholder': 'Email'}),
label='',
)
password = forms.CharField(
widget=forms.PasswordInput(attrs={'class': 'registerforms', 'placeholder': 'Password'}),
label='',
)
我的网址
url(r'^login/$', views.login_view, name='login_view'),
我的模板
<form action="" method="post" role="form">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
答案 0 :(得分:1)
问题在于: user = authenticate(email = email,password = password) 默认的身份验证后端使用用户名(而不是电子邮件)来验证用户身份。如果您想使用电子邮件,则需要创建自定义后端。您可以按照此处的说明(https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#authentication-backends)
创建一个此外,您需要在重定向('/ account /')前放置“return”以使重定向正常工作(否则它会通过在结尾处执行返回呈现(...)再次返回表单。功能)。