2017-01-17 2 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') 

Я попытался также добавить функцию получить, но тогда называть себя только бесконечное число раз ,

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

Смежные вопросы