博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对django中间件的理解
阅读量:5145 次
发布时间:2019-06-13

本文共 2289 字,大约阅读时间需要 7 分钟。

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 MiddlewareMixinclass 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 responseclass 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 responseclass 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

  运行结果:

  

 

  

转载于:https://www.cnblogs.com/kisun168/p/10959820.html

你可能感兴趣的文章
java面试题—精选30道Java笔试题解答(一)
查看>>
Excel批量修改文件
查看>>
根据经纬度查询最近距离,mysql查询经纬度附近范围
查看>>
第一篇博客
查看>>
SAP库龄表
查看>>
史上最全设计模式导学目录(完整版)
查看>>
方正璞华培训讲师
查看>>
数字产品经理的培养
查看>>
[bzoj4826][Hnoi2017]影魔
查看>>
iOS 取绝对值函数
查看>>
【转】Pro Android学习笔记(四六):Dialog(3):对话框弹对话框
查看>>
蓝桥杯练习 用筛法求之N内的素数 线性素数筛
查看>>
VS无法加载Web项目
查看>>
我的第一个python爬虫:爬取豆瓣top250前100部电影
查看>>
spring-aop使用记录
查看>>
《软件测试(原书第2版)》学习笔记-01
查看>>
CSU 1115 最短的名字
查看>>
车大棒浅谈jQuery源码(一)
查看>>
spring mvc注入配置文件里的属性
查看>>
垃圾收集算法学习
查看>>