Django 2.0 Middleware的写法
网上很多写法,都是传统的写法,
process_request和process_response方法,还可以用,但process_view的执行流程已经不行了。
看了官方文档,推荐的写法,也是用__call__方法来作实现了。
我试了新老方法,从输出,可以看出效果了。
中间件处理的顺序还是request从上到下,response从下回到上的。
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class Row1(MiddlewareMixin): def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def process_request(self, request): print('中间件1的请求') def process_response(self, request, response): print('中间件1的返回') return response def __call__(self, request): # Code to be executed for each request before # the view (and later middleware) are called. print('中间件1的 view前调用') response = self.get_response(request) # Code to be executed for each request before # the view (and later middleware) are called. print('中间件1的 view之后调用') return response class Row2(MiddlewareMixin): def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def process_request(self, request): print('中间件2的请求') # return HttpResponse('前端显示:中间件:M2.process_request') def process_response(self, request, response): print('中间件2的返回') return response def __call__(self, request): # Code to be executed for each request before # the view (and later middleware) are called. print('中间件2的 view前调用') response = self.get_response(request) # Code to be executed for each request before # the view (and later middleware) are called. print('中间件2的 view之后调用') return response class Row3(MiddlewareMixin): def __init__(self, get_response): self.get_response = get_response # One-time configuration and initialization. def process_request(self, request): print('中间件3的请求') def process_response(self, request, response): print('中间件3的返回') return response def process_view(self, request, callback, callback_args, callback_kwargs): print('中间件3的 view')
settings.py里的排列:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'Middle.cm1.Row1', 'Middle.cm1.Row2', 'Middle.cm1.Row3', ]
输出,注意Row3里process_view输出没有反应,
而Row1和Row2的process_request, process_rewponse的输出被忽略。
Quit the server with CTRL-BREAK. 中间件1的 view前调用 中间件2的 view前调用 中间件3的请求 中间件3的返回 中间件2的 view之后调用 中间件1的 view之后调用 [03/Jan/2019 20:08:58] "GET / HTTP/1.1" 200 16348
Django 2.0 Middleware的写法的更多相关文章
- Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正)
Django 2.0官方文档中文 渣翻 总索引(个人学习,欢迎指正) 置顶 2017年12月08日 11:19:11 阅读数:20277 官方原文: https://docs.djangoprojec ...
- Django 2.0官方文档中文 总索引
Django 2.0官方文档中文 渣翻 总索引 翻译 2017年12月08日 11:19:1 官方原文: https://docs.djangoproject.com/en/2.0/ 当前翻译版本: ...
- Django 从0开始创建一个项目
title: Django 从0开始创建一个项目 tags: Django --- Django 从0开始创建一个项目 创建Django工程及配置 创建工程:django-admin starproj ...
- django 2.0 xadmin 错误集锦
转载 django 2.0 xadmin 错误集锦 2018-03-26 10:39:18 Snail0Li 阅读数 5188更多 分类专栏: python 1.django2.0把from dj ...
- Django分析之Middleware中间件
写了几周的脚本,今天终于开始接触web框架了~学习Python的web框架,那么Django就几乎是必修课了,这次的工作是先打打下手,主要的任务是在setting中添加版本号,在渲染静态css,js的 ...
- Django 2.0 新特性 抢先看!
一.Python兼容性 Django 2.0支持Python3.4.3.5和3.6.Django官方强烈推荐每个系列的最新版本. 最重要的是Django 2.0不再支持Python2! Django ...
- Django 2.0 学习
Django django是基于MTV结构的WEB框架 Model 数据库操作 Template 模版文件 View 业务处理 在Python中安装django 2.0 1 直接安装 pip inst ...
- Django组件之Middleware
一.中间件 在django的settings.py文件下,有一个变量为MIDDLEWARE,里面放的就是中间件. MIDDLEWARE = [ 'django.middleware.security. ...
- Django 2.0.3 使用笔记
运行环境: Python 3.5.2 Django 2.0.3 Django Admin中model显示为中文 定义model时,定义一个Meta对象,设置需要显示的中文名称.verbose_name ...
随机推荐
- 缓存方案 通过SqlDependency实现Cache和Database的同步
对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作) ...
- VUE2.0 饿了吗视频学习笔记(四):颜色、跳转、设置、vue-resource
https://gitee.com/1981633/vue_study.git 源码下载地址,随笔记动态更新中 1.设置选中项颜色 <template> <div id=" ...
- eclipse2019-03设置代码编辑区背景为图片
一.我的主题设置如下所示 二.找到如下所示或类似的文件夹 三.在该文件夹里的images文件夹里添加图片 四.在CSS目录下的e4-dark_win.css文件中添加如下代码 .MPart Style ...
- 三、内存管理单元---MMU
3.1 MMU介绍 3.1.1 MMU 特性 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现在的多用户多进 ...
- Linux - 系统基础操作
wall # 给其它用户发消息 whereis ls # 查找命令的目录 which # 查看当前要执行的命令所在的路径 clear # 清空整个屏幕 reset # 重新初始化屏幕 cal # 显示 ...
- CF1009E [Intercity Travelling]
这道题先考虑一种暴力n方做法 设\(f_i\)表示到\(i\)点所有情况的困难度之和(\(f_0=0\)),\(pre_i=\sum_{j=1}^{i} a_j\) 考虑从点\(j\)中途不经过休息站 ...
- 修正iOS从照相机和相册中获取的图片方向
使用系统相机拍照得到的图片的默认方向有时不是ImageOrientationDown,而是ImageOrientationLeft,在使用的时候会出现图片顺时针偏转90°.使用fixOrientati ...
- sql 查询名字中有_的员工
select * from emp where ename like '%\_%' escape '\' ;\可以换作任意的字符 select * from emp where ename like ...
- Ubuntu/Debian 微信安装
1. 更新系统 $ sudo apt-get update $ sudo apt-get install git-core curl build-essential openssl libssl-de ...
- 【PE结构】由浅入深PE基础学习-菜鸟手动查询导出表、相对虚拟地址(RVA)与文件偏移地址转换(FOA)
0 前言 此篇文章想写如何通过工具手查导出表.PE文件代码编程过程中的原理.文笔不是很好,内容也是查阅了很多的资料后整合出来的.希望借此加深对PE文件格式的理解,也希望可以对看雪论坛有所贡献.因为了解 ...