2017-05-07 70 views
1

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

你可以发布堆栈跟踪,如果有的话? 您确定每次尝试登录时表单都有效吗? – zaidfazil

回答

1

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

另外,您需要在重定向('/ account /')前面放置“return”以便重定向正常工作(否则它会通过重新返回表单在函数的末尾执行返回渲染(...))。