如果用户已经通过身份验证,我想重定向到主页。所以我想从/重定向到/ main
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'),
schwobaseggl.. 6
您确实会在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'
。
您确实会在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'
。