zoukankan      html  css  js  c++  java
  • django 强制登录最佳实践

    参考:

    https://python-programming.courses/recipes/django-require-authentication-pages/

    即通过中间件来做AOP拦截。不用每个函数每个类加修饰器/MixIn。

    1. 在某个处理用户相关的模块中添加middleware.py, 内容如下:

    from django.http import HttpResponseRedirect
    from django.conf import settings
    from re import compile
    
    EXEMPT_URLS = [compile(settings.LOGIN_URL.lstrip('/'))]
    if hasattr(settings, 'LOGIN_EXEMPT_URLS'):
        EXEMPT_URLS += [compile(expr) for expr in settings.LOGIN_EXEMPT_URLS]
    
    class LoginRequiredMiddleware:
        """
        Middleware that requires a user to be authenticated to view any page other
        than LOGIN_URL. Exemptions to this requirement can optionally be specified
        in settings via a list of regular expressions in LOGIN_EXEMPT_URLS (which
        you can copy from your urls.py).
    
        Requires authentication middleware and template context processors to be
        loaded. You'll get an error if they aren't.
        """
        def process_request(self, request):
            assert hasattr(request, 'user'), "The Login Required middleware
     requires authentication middleware to be installed. Edit your
     MIDDLEWARE_CLASSES setting to insert
     'django.contrib.auth.middlware.AuthenticationMiddleware'. If that doesn't
     work, ensure your TEMPLATE_CONTEXT_PROCESSORS setting includes
     'django.core.context_processors.auth'."
            if not request.user.is_authenticated():
                path = request.path_info.lstrip('/')
                if not any(m.match(path) for m in EXEMPT_URLS):
                    return HttpResponseRedirect(settings.LOGIN_URL)

    2. 使用此middleware

    settings.py 中的 middleware_classes的最后添加一行

    MIDDLEWARE_CLASSES = [
        ...   
        'myapplication.middleware.LoginRequiredMiddleware',
    ]

    3. 如果有要放水的url,通过settings.py中添加LOGIN_EXEMPT_URLS(tuple of string)变量设置,例如:

    LOGIN_EXEMPT_URLS = (
        r'^accounts/signup/$',
    )
  • 相关阅读:
    forfiles
    windows 安装 keras
    windows上使用tensorboard
    python类定义与c#的一些区别
    iis https 客户端证书
    DevExpress历史安装文件、源码、注册破解下载
    AE开发,执行GP操作的时候的错误
    USB无线网卡和PCI-E无线网卡如何选择(转)
    .NET 对实现IPersistStream接口的对象进行保存和读取
    搜索
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/6163571.html
Copyright © 2011-2022 走看看