• Django之中间件


    1、中间件流程

      当启动django程序并发送一个请求后,首先通过WSGI,然后走一遍settings.py中设置的MIDDLEWARE,即中间件:

    2、中间件的五个方法:

      1) process_request(request):

        - request是一个HttpRequest对象

        - 在Django决定执行哪个视图之前,process_request()会在每个请求上调用。

      2)process_view(request, view_func, view_args, view_kwargs):

        - request:一个HttpRequest对象

        - view_func :Django会调用的一个Python函数

        - view_args:会被传递到视图的位置参数列表

        - view_kwargs:会被传递到视图的关键字参数字典

        - process_view()会在Django 调用视图之前被调用。它将返回None 或一个Httpresponse对象。如果返回None,Django 将会继续处理这个请求,执行其它的process_view() 中间件,然后调用对应的视图。如果返回一个Httpresponse对象,Django 就不用再去调用其它的view 或exception 中间件,或对应的视图.

      3)process_exception(request, exception):

        - request:一个HttpRequest对象

        - exception:一个被视图中的方法抛出来的 Exception对象

        - 如果当一个视图抛出异常时,Django会调用process_exception()来处理,而不会执行process_response。process_exception()应该返回一个None 或者一个Httpresponse对象。如果它返回一个Httpresponse对象,模型响应和响应中间件会被应用,响应结果会返回给浏览器。否则, 默认的异常处理机制将会被触发。

      4)process_template_response(request, response):

        - request:一个HttpRequest对象

        - response:一个TemplateResponse对象(或等价的对象),由Django视图或者中间件返回。

        - 如果响应的实例有render()方法,这时候process_template_response()在视图刚好执行完毕之后会被调用。

      5)process_response(request, response):

        - request:一个HttpRequest对象

        - response:Django视图或者中间件返回的HttpResponse或者StreamingHttpResponse对象。

        - 该方法会在所有响应返回浏览器之前被调用,这个方法必须返回Httpresponse或者StreamingHttpResponse对象。它可以改变已有的response,或者创建并返回新的HttpResponse或StreamingHttpResponse对象。

      注意:最后在响应阶段中,中间件以相反的顺序被应用,即在MIDDLEWARE中,最底下的类会最先被运行。

    3、自定义中间件

      1)在项目下新建一个文件夹:Middle,在里面建立一个MyMiddle.py文件,写下:

    # django1.10 以后的版本需要导入并继承该模块
    from django.utils.deprecation import MiddlewareMixin
    
    # 创建一个类,并定义process_request和process_response两个方法
    # 其它三个方法可以看情况自行定义
    class Row(MiddlewareMixin):
        def process_request(self, request):
            print('处理请求')
    
        def process_response(self, request, response):
            print('处理响应')
            return response

      2)在settings.py中的MIDDLEWARE里加上自己写的类的路径:

  • 相关阅读:
    Knol of Fabio Maulo
    调用非.net系统的Webservice的探索 ( 二 ) WSE
    在Sql Server 使用系统存储过程sp_rename修改表名或列名
    Who is locking the DB account?
    (python learn) 7 字典
    (python learn) 8 流程控制
    (python learn) 4 number&& string
    where is the data come from after we drop the table
    (healthy recorder) 治疗第6天
    (python learn) 6 列表
  • 原文地址:https://www.cnblogs.com/value-code/p/8516930.html
Copyright © 2020-2023  润新知