django中间件学习

中间件的定义

wsgi接口之后、urls.py之前,在全局操作Django请求和响应的模块。

中间件的使用

(1)django中setting.py文件有默认的7个中间件。从源码看从,中间件的构造首先要定义一个继承MiddlewareMixin的类,可以在类中实现以下5个方法。主要实现process_request和process_response两个方法
1)process_request(self,request)
2)process_response(self,request,response)
3)process_view(self,request,view_func,view_args,view_kwargs)
4)process_template_response(self,request,response)
5)process_exception(self, request, exception)
(2)自定义中间件示例

from django.utils.deprecation import MiddlewareMixin


class FirstMiddleWare(MiddlewareMixin):
    def process_request(self,request):
        print("FirstMiddle_request")
    def process_response(self,request,response):
        print("FirstMiddle_response")
        return response

(3)process_request(self,request)
1)有一个request参数,按照注册顺序的正序执行,在wsgi后执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。

(4)process_response(self,request,response)
1)有request,response两个参数,按照注册顺序的倒序执行,在url.py前执行。
2)必须有一个response返回值。

(5)process_view(self,request,view_func,view_args,view_kwargs)
1)有request,view_func,view_args,view_kwargs四个参数,按照注册顺序的正序执行,在url.py之后执行
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。

(6)process_template_response(self,request,response)
1)有response.response两个参数,按照注册顺序的倒序执行,在template中页面执行完之后执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。

(7)process_exception(self, request, exception)
1)有request,exception两个参数,按照注册顺序的倒序执行,视图函数出现异常的时候才执行。
2)当返回None,继续执行下一个中间件,当返回response,直接逃过后面所有的程序,将response返回给浏览器。

django中间件5种方法的执行顺序

  1. process_request
  2. url.py
  3. process_view
  4. view.py
  5. 有异常执行process_exception
  6. process_template_response
  7. process_response

猜你喜欢

转载自blog.csdn.net/xyl___/article/details/88632419