2017-01-17 66 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部分視圖本身,因此無限重定向循環。這樣做,而不是:

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

你也應該重新命名的第一個你的兩個意見urls.py'main'

+0

謝謝,這個作品! – ikreb

相關問題