Django,将所有未经过身份验证的用户重定向到登录页面

 好久不见.Mr 发布于 2023-02-02 19:47

我有一个django网站,里面有很多网址和观点.现在,我已要求将所有未经过身份验证的用户重定向到某个目标网页.因此,所有视图都必须检查是否user.is_authenticated()返回到一组新的着陆页.

它可以以一种漂亮的方式完成,而不是弄乱我views.py/ urls.py那么多吗?

4 个回答
  • 您可以使用中间件.

    像这样的东西将检查用户auth每个请求:

    class AuthRequiredMiddleware(object):
        def process_request(self, request):
            if not request.user.is_authenticated():
                return HttpResponseRedirect(reverse('landing_page')) # or http response
            return None
    

    文档: process_request

    另外,不要忘记在settings.py中启用它

    MIDDLEWARE_CLASSES = (
        ...
        'path.to.your.AuthRequiredMiddleware',
    )
    

    2023-02-02 19:48 回答
  • 有一种更简单的方法,只需将"login_url"参数添加到@login_required,如果用户没有登录,他将被重定向到登录页面.你可以在这里找到它

    from django.contrib.auth.decorators import login_required
    
    @login_required(login_url='/accounts/login/')
    def my_view(request):
        ...
    

    2023-02-02 19:48 回答
  • 从Django 1.10开始,自定义中间件类必须实现新的样式语法.您可以使用以下类来验证用户在尝试访问任何视图时是否已登录.

    from django.shortcuts import HttpResponseRedirect
    
    
    class AuthRequiredMiddleware(object):
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            # Code to be executed for each request before
            # the view (and later middleware) are called.
    
            response = self.get_response(request)
            if not request.user.is_authenticated():
                return HttpResponseRedirect('login')
    
            # Code to be executed for each request/response after
            # the view is called.
    
            return response
    

    2023-02-02 19:49 回答
  • 查看登录所需装饰的文档

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
        ...
    

    另一个选择是将它添加到您的urls.py模式,请参阅此答案

    urlpatterns = patterns('',
        (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}),
    )
    

    2023-02-02 19:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有