zoukankan      html  css  js  c++  java
  • 69 自定义中间件

    主要内容:

    0 : django的中间件是什么: 是一个python类, 用来在全局范围内处理请求和响应的一个钩子

    1 . 自定义中间件的写法:

      1 . 在app01 下新建一个py文件,

      在这个文件中写自己的类的时候, 需要继承MiddlewareMixin

      from django.utils.deprecation import MiddlewareMixin

    from django.utils.deprecation import MiddlewareMixin
    from django.shortcuts import render, HttpResponse
    class MD1(MiddlewareMixin):pass
    class MD1(MiddlewareMixin):pass
    

      2. 在setting文件中MIDDLEWARE 列表中写入

       'app01.my_middleware.MD1',    #自定义中间件md1
       'app01.my_middleware.MD2',     #自定义中间件md2
    

      3. 自定义中间件包括process_request方法, process_response方法, process_views方法, process_exception方法, process_template

    2. process_request(处理请求方法)

      1, 执行时间: 在视图函数之前

      2, 参数: 视图函数中用到的参数request

      3, 执行顺序: 按照setting列表里中间件顺序执行(按照注册顺序执行)

      4, 返回值:

        none: 正常流程

        返回response:当前中间件后面的中间件的process_request方法,process_response方法, 视图函数,不在执行, 执行当前的process_response方法以及之前的process_response方法.

    process_request(self, request)

    3 process_response()方法:

      1 :  执行时间: 在视图函数之后

      2 :  参数: process_response(self, request, respnse), respnse: 视图参数中用到的httpresponse

      3 : 执行顺序: 按照注册顺序反的顺序

      4 : 返回值:  必须是respnse对象

    4 process_view()方法:

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

      2 : 参数: process_view(self, request, view_func, view_args, view_kwargs)

        view_func : 要执行的视图函数

        view_args : 视图函数的位置参数

        view_kwargs: 视图函数的关键字参数.

      3 : 执行顺序: 按照注册顺序执行

      4 : 返回值: none正常走

           如果当前的process_view方法有返回值: 之后的process_view方法将不再执行,也不走视图函数, 直接走process_response方法.

      5 : 此前三个方法的具体执行流程如下:

    5 process_exception()方法:  此方法执行是有触发条件的, 有异常才会执行.

      1 执行时间 : 在视图函数之后, 在response方法之前

      2 参数: process_exception(self, request, exception):

        exception 指的是错误信息

      3 返回值: none正常走, 

           如果返回httpresponse, 注册顺序之前的中间件process_exception方法不走了, 执行所有中间件的response方法.

    这是MD1中的process_request方法
    这是MD2中的process_request方法
    这是MD1中的process_view方法
    这是MD2中的process_view方法
    这是index函数
    invalid literal for int() with base 10: '抛出异常'
    这是MD2中的process_exception方法
    这是MD2中的process_response方法
    这是MD1中的process_response方法
    

      4 执行顺序: 按照注册顺序倒叙执行 

    6 process_template_response()方法:

      1   触发条件: response对象要求有一个render方法

      2   执行时间: 在视图函数之后, 在process_response之前

      3   参数:process_template_response(self, request, response)

      4  返回值: response对象

      5 执行顺序: 按照注册顺序倒叙执行

      6 详细过程: 如下图

    7 django流程图

     

  • 相关阅读:
    如何查看微信公众号的历史文章(微信订阅号查看历史消息)
    微信服务号有福啦 每月可以微信群发4次
    欲提高微信图文转化率 需学点如何吊胃口
    只需按一下空格键就可以标注 不用众里寻他千百度
    如何让你的微信图文转化率达到300%
    是智能手机推动windows xp系统停止服务吗
    响应式js幻灯片代码一枚
    微信公众平台回复链接可以直接访问,但不能是锚文字链接<a>标签
    如何用腾讯电脑管家备份微信聊天记录
    android版微信5.2.1更新 支持微信聊天记录备份到电脑上
  • 原文地址:https://www.cnblogs.com/gyh412724/p/9792525.html
Copyright © 2011-2022 走看看