2017-05-26 16 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) 

あなたが例えば2つのチェック、

を追加する必要があります。

if not user: 
    return False 

if not user.is_active: 
    retuen False 

あなたは 'でユーザーを認証すると、ため、 authenticate '関数を呼び出すと、ログイン資格が正しい場合はユーザーオブジェクトを返し、そうでない場合は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

ご意見ありがとうございます。 しかし、問題はフォームが有効ではないということです。これがあなたがここで言及したことに関連しているかどうかわかりません –