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 ...
随机推荐
- Study 3 —— 表格
表格基本格式: <table> <tr> <td></td> <td></td> </tr> <tr> ...
- Java编程思想 学习笔记10
十.内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性.然而必须要了解,内部类和组合是 ...
- LaTeX简历模板
%# -*- coding:utf-8 -*- %% start of file `template_en.tex'. %% Copyright 2006-1008 Xavier Danaux (xd ...
- VUE2.0 饿了吗视频学习笔记(五):父子对象传递、显示图片
一.父子组件之间对象传递 1.app.Vue中的v-header 中加入 v-bind:seller="seller" template> <div id=" ...
- MySQL事物(一)事务隔离级别和事物并发冲突
数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...
- Java EE之Form的get与post方法
Form表单中method="post/get'的区别 Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生 ...
- shell 终端常用插件
参考链接: http://get.ftqq.com/992.get 1.zsh 2.autojump 3.apt-get install lamp-server^ 4.tldr 5.tree (显示目 ...
- ubuntu 14.04界面美化
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABVYAAAMACAIAAABAXKuVAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4Xu
- 【Python】多线程-线程池使用
1.学习目标 线程池使用 2.编程思路 2.1 代码原理 线程池是预先创建线程的一种技术.线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态,即均为启动,不消耗 ...
- 802.11 af 要点
(1)TVWS工作在 VHF/UHF 频段,欧洲为 470-790MHZ, 美国为 54-698MHZ. (2)GDB(Geolocation Database):地理位置数据库,与其他802.11协 ...