如何防止在Django中成功登录后访问登录页面?

如何防止在Django中成功登录后访问登录页面?,django,login,django-login,Django,Login,Django Login,使用django.contrib.auth.views.login方法在我的项目中执行登录方法,如何防止在成功登录后再次访问/registration/login/页面?您可以使用此-Decorator取消登录视图 有关decorators的一些背景信息,请参阅本博客文章,这些信息甚至解释了如何使用您的特定问题:在您的登录视图中,检查用户是否已通过身份验证: def your_login(request): if request.user.is_authenticated():

使用
django.contrib.auth.views.login
方法在我的项目中执行登录方法,如何防止在成功登录后再次访问
/registration/login/
页面?

您可以使用此-Decorator取消登录视图


有关decorators的一些背景信息,请参阅本博客文章,这些信息甚至解释了如何使用您的特定问题:

在您的登录视图中,检查用户是否已通过身份验证:

def your_login(request):
    if request.user.is_authenticated():
        return redirect('yourhomepage') # or somewhere else or last url
编辑

假设您希望继续以这种方式进行身份验证,那么我能想到的重定向的唯一方法就是通过中间件

  • 创建一个中间件
  • 检查当前url是否与您的登录url匹配
  • 若用户已经通过身份验证,请重定向到主页,否则按常规处理

  • 要在“登录”视图中进行检查,请检查用户是否已通过身份验证。您应该选择:

    def your_login(request):
    if request.user.is_authenticated():
        return redirect('/') #redirect to your home page
    
    这是正确的


    感谢您确认我的回答

    如果用户已经登录,您可以重定向该用户,并请求/登录/?我认为如果用户已登录,则拒绝他再次访问登录表单是正常的。不是吗?关于你的方法,问题是我使用的是django.contrib.auth.views.login方法,所以我不应该修改它。使用decorator并不是修改视图。您可以在URL模式中应用decorator。在URL.py中使用decorator的解释如下:。另一方面,正如Thierry所建议的,编写自定义登录视图并对其进行修饰(或拦截来自已登录用户的呼叫)并不难,这是正确的,但正如我在下面提到的,我没有自定义的登录视图,因为我使用的是django.contrib.auth.views.login,我无法修改它。您可以显示使用django登录函数的代码吗?当然,在我的URLConf中有一个简单的映射:(r'^login/$,'django.contrib.auth.views.login')