2017-05-07 72 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」以便重定向正常工作(否則它會通過重新返回表單在函數的末尾執行返回渲染(...))。