我的自定义django登录视图将无法正常工作

时间:2017-05-07 05:07:04

标签: python django

我试图创建自己的自定义登录页面来测试我的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>

1 个答案:

答案 0 :(得分:1)

问题在于: user = authenticate(email = email,password = password) 默认的身份验证后端使用用户名(而不是电子邮件)来验证用户身份。如果您想使用电子邮件,则需要创建自定义后端。您可以按照此处的说明(https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#authentication-backends

创建一个

此外,您需要在重定向('/ account /')前放置“return”以使重定向正常工作(否则它会通过在结尾处执行返回呈现(...)再次返回表单。功能)。