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 ...
随机推荐
- scipy笔记—scipy.misc.imresize用法(方便训练图像数据)
scipy.misc.imresize 不同于普通的reshape, imresize不是单纯的改变图像矩阵的维度,而是能将图片重采样为指定像素,这样给深度学习中训练图像数据带来方便. import ...
- ps知识集锦
1.工具箱 移动工具 [V]矩形.椭圆选框工具 [M]套索.多边形套索.磁性套索 [L]快速选择工具.魔棒工具 [W] 裁剪.透视裁剪.切片.切片选择工具 [C]吸管.颜色取样器.标尺.注释.12 ...
- 图片压缩之-JPEGCodec失效替换方案
今天遇到一个405错误,提示Method not allowed ,一直以为是控制器出问题了,后来发现实际上是Jpeg库有问题.刚开始用这个库,没想到已经不推荐使用了.下面是网上找的解决方案.http ...
- buildroot构建项目(二)--- u-boot 2017.11 建立 2440 开发板
一.准备工作 在建立之前,先需要将下载的u-boot 拷贝一份出来解压,在此工程下进行更改和创建.同时根据前面搜索到的 mini2440开发板所在的版本,下载一份u-boot 拷贝出 mini2440 ...
- 二、Internet地址结构
IP路由器实现的转发程序使用IP地址来识别流量去向.IP地址也表示流量来源. 2.1 IP地址的表示 IPV4地址通常采用点分四组或点分十进制表示法,如192.168.1.1. 点分四组表示法由四个用 ...
- 20155334 2016-2017-2 《Java程序设计》第五周学习总结
20155334 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章:异常处理 Java中所有错误都会被打包为对象,在编程的时候会遇到因各种原因而导致的错 ...
- (转)MFC界面风格
以前在XP写的程序,现在系统换成了WIN7,现在对话框在编辑和预览的时候显示都如图一所示,可实际编译生成之后的显示却如图二所示,是什么问题?如何设置两者的显示风格使其保持一致? ----------- ...
- Mybatis的分页插件PageHelper分页失效的原因
引用博客:个人博客地址:https://alexaccele.github.io/ PageHelper是Mybatis的一个很好的分页插件,但要使用它的分页功能需要注意一下几点 1.导入相关包,例如 ...
- 操作系统笔记(六)页面置换算法 FIFO法 LRU最近最久未使用法 CLOCK法 二次机会法
前篇在此: 操作系统笔记(五) 虚拟内存,覆盖和交换技术 操作系统 笔记(三)计算机体系结构,地址空间.连续内存分配(四)非连续内存分配:分段,分页 内容不多,就不做index了. 功能:当缺页中断发 ...
- Python模块学习 - fnmatch & glob
介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名的标准库. fnmatch模块 大部分情况下使用字符串匹配查找特定的文件就能满足需求,如果需要更加灵活的字符串匹配,就没有办法了,这里 ...