zoukankan      html  css  js  c++  java
  • django 中间件操作

    什么是中间件?
    中间件是一个类.用来处理Django的请求和响应的框架级别的钩子
    中间件的定义方法
    五个方法:(process_request,process_reponse)
    process_request(self,request)
    process_view(self, request, view_func, view_args, view_kwargs)
    process_template_response(self,request,response)
    process_exception(self, request, exception)
    process_response(self, request, response)
    用法:
    1,引入from django.utils.deprecation import MiddlewareMixin
    2,定义类,并继承MiddlewareMixin
    class MD1(MiddlewareMixin):
    函数
    3,在setting中进行注册
    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',
        'app01.my_middlewares.MD2', 
        'app01.my_middlewares.MD1',
    ]
     
    1,processs_request:
    1,执行时间:
    在视图之前执行
    2,参数:
    request 和视图中的request是同一个
    3,返回值:
    返回None 默认 也是常用
    返回reponse对象
    不执行后面中间的process_request方法和视图
    直接执行当前中间件的process_response方法
    4,执行顺序
    按照注册的顺序执行
    2,process_response
    1,执行时间:
    在视图函数执行之后
    2,request,response
    request和视图中的request是同一个
    response返回的response对象
    3,返回值
    返回response对象 必须要写
    4,执行顺序:
    按照注册顺序倒序
    3,process_view
    1,执行时间;
    在视图函数之前 process_request
    2,参数:
    view_func 将要执行的视图含函数
    view_args 视图函数的可变长位置的参数
    view_kwargs 视图函数的可变长关键参数
    3,返回值
    返回None
    返回response 不执行后面的process_view和视图
    直接执行所有中间件的process_reponse方法
    4,执行顺序
    按照注册顺序执行
    4,processs_exception(触发条件:有错误)
    1,执行时间
    在视图函数之后,process_response之前执行
    2,参数:
    exception 错误对象
    3,返回值:
    返回: None 不对错误进行处理 交给下一个中间件处理 如果没有交给django
    返回 response 对象 下一个中间的process_exception不执行,直接执行所有中间件pricess_response
    4,执行顺序:
    按照注册的倒序执行
    5,process_template_response(条件触发:视图返回的response有render方法)
    1,执行时间
    在视图函数之后,process_response之前执行
    2,参数:response
    3,返回值
    返回response对象
    4,执行顺序:
    按照注册的倒序执行,执行完所有的process_template_response方法后执行
    请求到达中间件之后,先按照正序执行每个注册中间件的process_reques方法,process_request方法返回的值是None,就依次执行,如果返回的值是HttpResponse对象,不再执行后面的process_request方法,而是执行当前对应中间件的process_response方法,将HttpResponse对象返回给浏览器。也就是说:如果MIDDLEWARE中注册了6个中间件,执行过程中,第3个中间件返回了一个HttpResponse对象,那么第4,5,6中间件的process_request和process_response方法都不执行,顺序执行3,2,1中间件的process_response方法。
     
    process_request方法都执行完后,匹配路由,找到要执行的视图函数,先不执行视图函数,先执行中间件中的process_view方法,process_view方法返回None,继续按顺序执行,所有process_view方法执行完后执行视图函数。假如中间件3 的process_view方法返回了HttpResponse对象,则4,5,6的process_view以及视图函数都不执行,直接从最后一个中间件,也就是中间件6的process_response方法开始倒序执行。
    process_template_response和process_exception两个方法的触发是有条件的,执行顺序也是倒序。总结所有的执行流程如下:
     
     
     
    流程图
     

  • 相关阅读:
    Hexo
    没有建立起壁垒就容易在竞争中失败(绑定形成利益共同体,稀缺性,早期靠非共识,中期靠执行力,后期靠垄断性)
    Delphi 的TStringBuilder防止服务器内存碎片化
    JSON与Delphi Object的互换
    Delphi调用爷爷类的方法(自己构建一个procedure of Object)
    Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 )
    接口幂等性的实现方式
    Topshelf+Quartz3.0
    时间复杂度
    调优工具/技术网站
  • 原文地址:https://www.cnblogs.com/lnrick/p/9692945.html
Copyright © 2011-2022 走看看