0

Djangoのログインとサインアップの区別に問題があります。私は正常にサインアップフォームを作成することができました(サインアップ時にユーザーもログインします)。私はフォームで別のサインを作るのに苦労しています。Djangoでのユーザーログイン、認証、サインアップ1.10

次のコードは、フォームに 'username'と 'password'フィールドを正しく表示します。 「送信」をクリックすると、情報はユーザオブジェクトとして保存され、正規化されてからデータベースに保存され、ユーザにログインするために使用されます。

私はでユーザーとログユーザーを追加する間の違いを生むだろうと思ったので、私はuser.save()の行を削除しようとしました。しかし、私の端末は、これが起こると、失敗した投稿要求( "POST/polls/HTTP/1.1" 200 1227)を表示します。

アカウント情報が既にデータベースに存在する場合、ユーザーにサインインさせるためにできることを教えてください。ありがとう!

class LoginFormView(View): 
form_class = LoginForm 
template_name = 'polls/login_form.html' 

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

#process the form data using post 
def post(self, request): 
    form = self.form_class(request.POST) 

    if form.is_valid(): 

     user = form.save(commit=False) 

     #cleaned and normalized data 
     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 
     user.set_password(password) 
     user.save() 

     #return user object if credentials are correct 
     user = authenticate(username=username, password=password) 

     if user is not None: 

      if user.is_active: 
       login(request, user) 
       return redirect('polls:index') 


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

コードのインデントを修正してください。 'LoginForm'とは何ですか? 'save()'メソッドは何をしますか?ログインフォームの場合、なぜパスワードを設定していますか? Djangoには、ログインビューを含む[認証ビュー](https://docs.djangoproject.com/en/1.10/topics/auth/default/#module-django.contrib.auth.views)が付属しています。なぜ自分で書くのではなく、それを使わないのですか? – Alasdair

答えて

0

これは簡単です。すでに長いプロセスを行っただけで、別のビューを作成してログインを処理します。

class LoginView(generics.FormView): 
    form_class = LoginForm 
    template_name = 'polls/login_form.html' 

    def form_valid(self, form): 
     username = form.cleaned_data.get('username') 
     password = form.cleaned_data.get('password') 

     user = authenticate(username=usernamem, password=password) 
     if user is not None: 
      if user.is_active: 
       login(user, self.request) 
       return redirect('polls:index') 
     return self.render_to_response(self.get_context_data(form=form))