当前位置:  开发笔记 > 编程语言 > 正文

Django:通过基于类的视图重定向已经登录的用户

如何解决《Django:通过基于类的视图重定向已经登录的用户》经验,为你挑选了1个好方法。

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



1> schwobaseggl..:

您确实会在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'

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有