zoukankan      html  css  js  c++  java
  • Django中间件 (middleware)

    • 中间件是处理django的请求和响应的框架级别的钩子,本质是一个类(直白一点中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作)

    • 由于其影响的是全局,所以需要谨慎使用,使用不当会影响性能。

    • 定义的中间件需要注册

    • django中请求响应流程

    1.中间件定义的五个方法:

    • process_request(self,request)
    • process_response(self, request, response)
    • process_view(self, request, view_func, view_args, view_kwargs)
    • process_exception(self, request, exception)
    • process_template_response(self,request,response)

    1.1 process_request

    • process_request(self,request)

    特征

    在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

    1. 执行时间: 在执行视图函数之前执行
    2. 参数: request
      • request和视图函数中的的request是一个对象
    3. 执行顺序:
      • 按照注册的顺序进行执行
    4. 返回值:
      • 返回值为none的时候,执行顺序正常
      • 返回值如果是HttpResponse, 后面的中间件的process_request、视图函数都不执行,直接执行当前中间件中的process_response方法,再倒序执行之前的中间件中process_response方法。

    1.2 process_response

    • process_response(self, request, response)

    特征

    在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

    1. 执行时间: 在执行视图函数之后执行
    2. 参数: request / response
      • request 和视图函数中的的request是一个对象
      • response 返回给浏览器响应对象(不一定是视图对象,peocess_request也会返回对象)
    3. 执行顺序:
      • 按照注册的顺序,倒序执行
    4. 返回值:
      • ​ HttpResponse:必须返回response对象
    • process_request执行流程

    1.3 process_view

    • process_view(self, request, view_func, view_args, view_kwargs)

    特征

    在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

    1. 执行时间: 视图函数之前,process_request之后

    2. 参数: request

      • request 和视图函数中的的request是一个对象
      • view_func 视图函数
      • view_args 视图函数的位置参数
      • view_kwargs 视图函数的关键字参数
    3. 执行顺序:

      • 按照注册的顺序进行执行
    4. 返回值:

      • 返回值为none的时候, 执行顺序正常
      • 返回值如果是HttpResponse, 后面的中间的process_view、视图函数都不执行,直接执行注册的最后一个中间件中的process_response方法,再倒叙执行之前的中间中process_response方法。
    • 执行流程图

    1.4process_exception

    • process_exception(self, request, exception)

    特征

    在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

    1. 执行时间((触发条件)): 视图函数之后,视图层面有错时才执行

    2. 参数: request/exception

      • request 和视图函数中的的request是一个对象
      • exception 视图中的错误对象
    3. 执行顺序:

      • 按照注册的顺序 倒叙执行
    4. 返回值:

      • 返回值为none的时候, 交给下一个中间件取处理异常,都没有处理交由django处理异常
      • 返回值如果是HttpResponse, 后面的中间件的process_exception不执行,直接执行最后一个中间件中的process_response方法,倒叙执行之前的中间中process_response方法。
    • 流程图

    1.5process_template_response

    • process_template_response(self,request,response)

    特征

    在视图函数之前执行的中间件方法按照注册顺序执行,在视图函数之后执行的中间件方法按照注册顺序倒序执行

    1. 执行时间((触发条件)): 视图函数之后,视图返回的是一个templateResponse对象(跟render用法类似)

    2. 参数: ,request,response

      • request 和视图函数中的的request是一个对象
      • response templateResponse对象
    3. 执行顺序:

      • 按照注册的顺序 倒叙执行
    4. 返回值:

      • HttpResponse:必须返回response对象
    • 流程图

    2.完整的django请求的生命周期

  • 相关阅读:
    python+django+vue搭建前后端分离项目
    PC网页js调用本地应用程序
    mysql-connetor-c 自动创建数据库、数据库表的命令
    JMeter设置响应数据的编码格式
    VS2013常用快捷键
    WPF 实现 TextBox 只能输入数字并且不能使用拷贝功能
    WPF 先显示登录成功,验证成功后显示主窗口
    ListControl 设置表格行高与字体
    win7 删除多余启动项的方法
    设置编辑工具UltraEdit的背景色为护眼颜色
  • 原文地址:https://www.cnblogs.com/bigox/p/11107416.html
Copyright © 2011-2022 走看看