zoukankan      html  css  js  c++  java
  • Django---中间件

    a. 中间件是一个类
    - process_request
    - 有,直接执行当前中间件和上方中间件的process_response
    - 无
    应用: 用户登录授权(排除不需要登录的url)

    实例:setting.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',
        'md.middleware.M1',
        'md.middleware.M2',
    ]

    新增midle ware 文件夹

    from django.shortcuts import HttpResponse,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): #request的时候进去
            print('m1.process_request')
    
        def process_view(self,request, view_func, view_func_args, view_func_kwargs): #走完所有request再执行该函数
            print('m1.process_view')
    
        def process_exception(self,request,exception):#有异常走该函数
            print('m1.process_exception')
    
        def process_response(self,request,response):#返回reponse时执行该函数
            print('m1.process_response')
            return response
    
        def process_template_response(self,request,response): #用render渲染时执行该函数
            print('m1.process_template_response')
            return response
    
    class M2(MiddlewareMixin):
        def process_request(self, request):
            print('m2.process_request')
    
        def process_view(self, request, view_func, view_func_args, view_func_kwargs):
            print('M2.process_view')
    
        def process_exception(self,request,exception):
            print('m2.process_exception')
            return HttpResponse('开发的程序员已经被打死')
        def process_response(self, request, response):
            print('m2.process_response')
            return response
    
        def process_template_response(self,request,response):
            print('m2.process_template_response')
            return response

    流程:

    - process_response
    - 必须有返回值

    - process_view
    - process_exception

    - process_tempalte_response
    - 必须有返回值
    - 必须对象中要有render方法

    b. 流程

    c. 什么时候用中间件?所有请求统一做处理时使用
    - 登录验证

    d. 中间件中的方法,可以有任意个

  • 相关阅读:
    Day 38
    Day 37
    Day 36
    Day 35
    Day 34
    Day 33
    Day 32
    Day 31
    Day 30
    华为CE6180高级ACL配置
  • 原文地址:https://www.cnblogs.com/mona524/p/7544720.html
Copyright © 2011-2022 走看看