中间件(django)笔记

Django框架中的中间件

在settings.py文件中这里写的都是django框架用到的中间件

ps:对于字符串的模块名可使用 importlib.import_module(‘模块名’)导入

自定义django中间件

创建MiddleWare.py文件,目录格式如图

创建自定义中间件类

from django.utils.deprecation import MiddlewareMixin


class MW(MiddlewareMixin):
    pass

在settings.py注册自定义的中间件,可根据需求调整中间件位置,暂时放在末尾

以上是自定义中间件的格式,下面是实现方法的具体要求

自定义中间件需继承django.utils.deprecation.MiddlewareMixin类,并至少实现以下五个方法之一

方法名 参数 执行顺序 执行条件 返回值 注释
process_request self, request 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) 请求从wsgi拿到之后

返回None,继续执行后续的中间件的process_request方法

返回response , 不执行后续的中间件的process_request方法,直接返回response

 
process_response self,request,response 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 请求有响应的时候 必须返回一个response对象  
process_view self, request, view_func, view_args, view_kwargs 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) 在urls.py中找到对应关系之后 在执行真正的视图函数之前

返回None,继续执行后续的中间件的process_view方法

返回response,直接返回response

view_func:将要执行的视图函数对象

view_args:视图函数的位置参数

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

process_exception self, request, exception 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 视图函数中抛出异常的时候才执行 返回None,继续执行后续中间件的process_exception 返回response,直接返回response exception:视图函数抛出的异常信息
process_template_response self, request, response 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) 视图函数执行完,在执行视图函数返回的响应对象的render方法之前  返回None,继续执行后续中间件的process_exception 返回response,直接返回response  

Django调用注册的中间件里面五个方法的顺序:
1. process_request
    urls.py
2. process_view
    view函数
3. 有异常就执行 process_exception
4. 如果视图函数返回的响应对象有render方法,就执行process_template_response
5. process_response


附django请求流程图、process_request、process_response、process_view执行流程图

Django请求流程图


        
            

process_request()和process_response()执行流程


            

process_view()执行流程


            
    

posted @ 2019-05-02 04:37  Wuliwawa  阅读(101)  评论(0编辑  收藏  举报