• python-day76--django-中间件


    什么是中间件?中间件应用场景?和装饰器区别?


    中间件 对于所有批量的请求用中间件合适,而对于某些请求个数少用装饰器合适
    - 中间件是什么? - 是一个类 - 方法名必须是process_request/process_response,否则无效 - 返回值注意: # 无返回值:继续执行后续中间件和视图函数 # 有返回值:执行自己的process_response和上面的response - 做过什么: - 用户登录验证 - csrf - session - 权限管理***
    ----------------------------------------------
    asd.a.py
            
    from django.conf import settings
    from django.shortcuts import redirect
    class MiddlewareMixin(object):
        def __init__(self, get_response=None):
            self.get_response = get_response
            super(MiddlewareMixin, self).__init__()
    
        def __call__(self, request):
            response = None
            if hasattr(self, 'process_request'):
                response = self.process_request(request)
            if not response:
                response = self.get_response(request)
            if hasattr(self, 'process_response'):
                response = self.process_response(request, response)
            return response
    
    
    class M1(MiddlewareMixin):
    
        def process_request(self,request):
            # 无返回值:继续执行后续中间件和视图函数
            # 有返回值:执行自己的process_response和上面的response
            # request.xxxx= 888
            # request.path_info # /login/
            if request.path_info == "/login/":
            # if request.path == "/login/":
                print(request.path)
                return None
            user_info = request.session.get(settings.SESS)
            if not user_info:
                return redirect('/login/')
    
        def process_response(self,request,response):
            print('m1.process_response')
            return response
    
    
    class M2(MiddlewareMixin):
    
        def process_request(self,request):
            print('m2.process_request')
    
        def process_response(self,request,response):
            print('m2.process_response')
            return response
      
    --------------------------------------------------        
    settings.py
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'asd.a.M1',
        'asd.a.M2',
    
    ]
    注意:必须在最后面加自定义的中间件

  • 相关阅读:
    多读者多写者的无锁队列
    PCI设备的地址空间
    交换机能不能连接不同的网段?
    VMware Workstation的三种网络连接模式
    Linux内存寻址和内存管理
    Fragment基础信息传递
    Android Studio获取SHA1和MD5方法
    AppCan学习笔记数据存储及listview简单应用
    Fragment基础生命周期
    Fragment基础创建
  • 原文地址:https://www.cnblogs.com/liuwei0824/p/7804128.html
Copyright © 2020-2023  润新知