2017-01-17 10 views
0

ユーザーが既に認証されている場合、メインページにリダイレクトします。 だから私は/ /メインにDjango:すでにログインしているユーザーをクラスベースのビューでリダイレクトします

views.pyからのリダイレクトをしたい:

class LoginView(FormView): 
    form_class = LoginForm 
    success_url = reverse_lazy('main') 
    template_name = 'module/login.html' 

    def form_valid(self, form): 

     if self.request.user.is_authenticated(): 
      return redirect(settings.LOGIN_REDIRECT_URL) 
     else: 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      user = authenticate(username=username, password=password) 

      if user is not None and user.is_active: 
       login(self.request, user) 
       return super(LoginView, self).form_valid(form) 
      else: 
       return self.form_invalid(form) 

settings.py

LOGIN_REDIRECT_URL = reverse_lazy('main') 
LOGIN_URL = reverse_lazy('login') 
LOGOUT_URL = reverse_lazy('logout') 

私はget関数を追加することも試みたが、それは自分自身だけで無限回を呼び出します。

def get(self, request, *args, **kwargs): 

    if request.user.is_authenticated(): 
     return HttpResponseRedirect('main') 
    else: 
     return HttpResponseRedirect('/login/') 

urls.py

url(r'^$', views.LoginView.as_view(), name='login'), 
url(r'^login/', views.LoginView.as_view(), name='login'), 
+0

あなたのurls.pyは何ですか? – e4c5

+0

コードを更新しました。 – ikreb

+0

ありがとうございます、@ schwobaseegglの解決策は私のために働く。 – ikreb

答えて

2

あなたは、したがって、無限リダイレクトループ、else一部でビュー自体にリダイレクトします。代わりに行います。あなたも'main'urls.pyであなたの2つのビューの最初の名前を変更する必要があり

def get(self, request, *args, **kwargs): 
    if request.user.is_authenticated(): 
     return HttpResponseRedirect('main') 
    return super(LoginView, self).get(request, *args, **kwargs) 

+0

ありがとう、これは動作します! – ikreb

関連する問題