2017-05-26 49 views
0

我能夠成功註冊。當用戶註冊時,他們已成功登錄。但在此之後,單獨登錄不起作用。我已經從代碼中複製並粘貼了代碼進行註冊,我不知道這裏出了什麼問題。Django表單無效

這裏是forms.py:

class UserForm(forms.ModelForm): 
    password=forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model=User 
     fields=["username","password","email"] 




class Login(forms.ModelForm): 
    password=forms.CharField(widget=forms.PasswordInput) 
    class Meta: 
     model=User 
     fields=["username","password"] 

這裏是views.py:

class singup(View): 
    form_class=UserForm 
    template_name='users/index.html' 


    def get(self,request): 
     form=self.form_class(None) 
     return render(request,self.template_name,{'form':form}) 

    def post(self,request): 
     form=self.form_class(request.POST) 

     if form.is_valid(): 
      user=form.save(commit=False) 

      username=form.cleaned_data['username'] 
      password=form.cleaned_data['password'] 

      user.set_password(password) 

      user.save() 

      user=authenticate(username=username,password=password) 

      if user is not None: 
       if user.is_active: 
        login(request,user) 
        return render(request,'home/index.html',{'username':username}) 

     return render(request, self.template_name, {'form': form}) 




class loginView(View): 
    form_class=Login 
    template_name='users/login.html' 

    def get(self,request): 
     form=self.form_class(None) 
     return render(request,self.template_name,{'form':form}) 

    def post(self,request): 
     form=self.form_class(request.POST) 

     if form.is_valid(): 

      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 

      user = authenticate(username=username, password=password) 


      login(request,user) 

      return render(request, 'home/index.html') 


     return render(request, self.template_name, {'form': form}) 

HTML代碼:

"<h1> Sign In</h1> 

<div class="container"> 
    {{ form.errors }} 
    {{ form.non_field_errors }} 

    <form action="" method="post"> 

     {% csrf_token %} 
     username <input type="text" name="username" id="username"> 
     <br> 
     <br> 

     password <input type="password" name="password" id="password"> 
     <br> 
     <br> 


     <input type="submit" value="login"> 

    </form> 
</div>" 

我覺得這裏的問題是,它不會在loginView中輸入「form.is_valid()」部分!

+0

顯示您的形式,也張貼堆棧跟蹤以及 – zaidfazil

回答

0

在你的代碼,通過認證後用戶:

user = authenticate(username=username, password=password) 

您需要添加兩次檢查,

例如:

if not user: 
    return False 

if not user.is_active: 
    retuen False 

因爲,當您進行身份驗證通過「用戶驗證「功能,如果登錄憑證正確,則返回用戶對象,否則返回None或AnnonymousUser。

您需要確保登錄憑證是正確的。

+0

非常感謝您的幫助。 但我認爲代碼甚至不會輸入「窗體是有效的」部分。它只是跳轉到「return render(request,self.template_name,{'form':form})」 –

+0

它可能正在您的索引頁上返回。請確保用戶在註冊時正確註冊。如果你可以給我看註冊碼,我可以幫你解決這個問題。 –

+0

我已編輯帖子。 我相信註冊應該沒問題。因爲當我填寫註冊表單時,它會被重定向到正確的頁面。我也在管理員頁面和新用戶顯示中檢查了這一點。 謝謝! –

0

檢查用於創建用戶的方法是User.objects.create_user(username=xxx,password=xxx)User.objects.create(username=xxx,password=xxx)

+0

謝謝你的評論。 但我認爲問題在於表單無效。我不知道這是否與你在這裏提到或不相關 –