gpt4 book ai didi

python - Django:按基于类的 View 重定向已经登录的用户

转载 作者:行者123 更新时间:2023-11-28 21:07:15 26 4
gpt4 key购买 nike

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

最佳答案

您确实在 else 部分重定向到 View 本身,因此无限重定向循环。改为:

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

您还应该将 urls.py 中的两个 View 中的第一个重命名为 'main'

关于python - Django:按基于类的 View 重定向已经登录的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41697984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com