1. 什么是中间件(Django)?

  对Django而言,中间件就是继承自MiddlewareMixin(位于django.utils.deprecation模块下)的类,该类对请求(request)及响应(response)的过程按照规则执行相应的控制方法,达到访问控制,权限管理,请求认证,数据缓存等等效果。

  在django2.x中,项目会默认开启以下中间件,通过查看这些中间件的源码可以得知,

  基本上这些内置中间件都重写了基类的process_request(request, *args, **kwargs)以及process_response(request, response *args, **kwargs)方法,

  中间件(CsrfViewMiddleware等)重写了process_view(self, request, callback, callback_args, callback_kwargs)

  视图(views)执行过程中的错误处理则是通过process_exception(self, request, exception)来控制。

  

2. 中间件所涉及的四种方法

  process_request(request, *args, **kwargs)

  process_view(self, request, callback, callback_args, callback_kwargs)

  process_response(request, response *args, **kwargs)          ------process_template_response(self,request,response)

  process_exception(self, request, exception)

3. 中间件方法的执行顺序

  

3. 自定义中间件并测试其执行流程

  我们在项目目录(与settings.py同级)下创建middleware包, 并新建test模块其内容如下:

from django.utils.deprecation import MiddlewareMixin

class ProcessMiddleware1(MiddlewareMixin):

    def __str__(self):
return 'middleware 1' def process_request(self, request):
print('%s:\t [%s]' % (self.__str__(), 'process_request'))
def process_view(self, *args):
print('%s:\t [%s]' % (self.__str__(), 'process_view'))
def process_response(self, request, response):
print('%s:\t [%s]' % (self.__str__(), 'process_response'))
return response class ProcessMiddleware2(MiddlewareMixin): def __str__(self):
return 'middleware 2' def process_request(self, request):
print('%s:\t [%s]' % (self.__str__(), 'process_request'))
def process_view(self, *args):
print('%s:\t [%s]' % (self.__str__(), 'process_view'))
def process_response(self, request, response):
print('%s:\t [%s]' % (self.__str__(), 'process_response'))
return response class ProcessMiddleware3(MiddlewareMixin): def __str__(self):
return 'middleware 3' def process_request(self, request):
print('%s:\t [%s]' % (self.__str__(), 'process_request'))
def process_view(self, *args):
print('%s:\t [%s]' % (self.__str__(), 'process_view'))
def process_response(self, request, response):
print('%s:\t [%s]' % (self.__str__(), 'process_response'))
return response

  运行结果:

  

  

最新文章

  1. truncate 、delete与drop区别
  2. inno setup介绍及官方网站地址
  3. 比较C++中的4种类型转换方式
  4. Eclipse中SVN的安装步骤(两种)和用法
  5. UDID
  6. poj 2100 Graveyard Design(尺取法)
  7. java异常的一些小知识
  8. .net 平台下, Socket通讯协议中间件设计思路(附源码)
  9. 【眼见为实】自己动手实践理解READ COMMITTED && MVCC
  10. kali权限提升之本地提权
  11. Scrapy框架-Spider
  12. Android TextView
  13. Array.sort()
  14. python基础 (编码进阶,文件操作和深浅copy)
  15. <王二的经济学故事>读书笔记
  16. Python之从头开始建立项目流程
  17. 【转】WebService 的创建,部署和使用
  18. python3安装后无法使用退格键的问题
  19. FromBottomToTop团队项目总结
  20. CentOS 7 Apache 多端口部署 Web Apps 指南

热门文章

  1. mysql配置mha高可用防火墙未关闭报错
  2. C#连接数据库_使用读取配置文件的方式
  3. (二)Spring容器
  4. LN : leetcode 343 Integer Break
  5. [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
  6. swiper4初始化/swiper-init/data-swiper
  7. Android学习笔记(十四) Handler理论补充
  8. Activity的四种启动模式区别
  9. Winform webbrowser 隐藏 html 元素
  10. eclipse 升级note