Django中间件的使用
Django中间件的使用
中间件(middleware)
中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应可以通过中间件,也就是说中间件可以处理request和response。
Django默认的中间件
在settings中Django以及默认添加了许多有用的中间件
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',
]
上面的配置中的中间件是有顺序的,从上到下依次通过,我们自定义的中间件如果使用的话也要按照正确的顺序添加到这里
中间件中的方法
中间件中有5个方法可以定义:
- process_request(self,request)
- process_view(self, request, callback, callback_args, callback_kwargs)
- process_template_response(self,request,response)
- process_exception(self, request, exception)
- process_response(self, request, response)
process_request
- 客户端发来请求与路由匹配执行之前执行
- 返回值是None时,继续向后执行下一个中间件的process_request或路由映射
- 返回值是HttpResponse对象时,不执行路由与views函数,直接执行该中间件与其之前的process_response,倒序执行
process_view
- 在执行完所有中间件的process_request与路由映射之后,views函数执行之前执行
- 执行顺序依然从第一个中间件到最后一个中间件
- callback参数为执行的views函数
- callback_args, callback_kwargs为views函数的参数
- 返回值是None时,继续向后执行下一个中间件的process_view或views函数
- 返回值是HttpResponse对象时,不执行views函数,直接执行所有中间件的process_response,倒序执行
process_template_response
- 视图函数返回的对象有一个render()方法(或者表明该对象是一个TemplateResponse对象或等价方法)时,才被执行(并不是views函数最后返回render对象)
- 在views执行之后,process_exception执行之前执行
- 返回值必须是response
- 倒序执行
process_exception
- process_exception用于捕捉views函数中的异常
- 在process_response之前执行
- exception是views函数中产生的异常对象
- 返回值是None时继续正常执行
- 返回值是HttpResponse对象:不再执行后面的process_exception方法,直接执行process_response
- 倒序执行
process_response
- 在response返回给客户端之前执行,也就值最后经过
- 必须返回HttpResponse对象
这里要注意,在执行views函数之前的中间件的方法都是正常顺序执行,views执行之后的中间件的方法是倒序执行
这里借用https://www.jianshu.com/p/b6e65d59f508 里的图片
定义自己的中间件
from django.utils.deprecation import MiddlewareMixin
class MyMiddleware(MiddlewareMixin):
def process_request(self, request):
print('->process_request')
def process_view(self, request, view_func, view_args, view_kwargs):
print('->view')
pass
def process_exception(self, request, exception):
pass
def process_response(self, request, response):
print('->process_response')
return response
def process_template_response(self,request,response):
print('->process_template_response')
return response
其中的方法可以不完全实现,只需要实现自己需求的方法即可
定义后别忘了在settings中完成激活
Django中间件的使用的更多相关文章
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- django 中间件
django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的.所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,用我们自己的方式 ...
- day20 FORM补充(随时更新),F/Q操作,model之多对多,django中间件,缓存,信号
python-day20 1.FROM生成select标签的数据应该来源于数据库. 2.model 操作 F/Q (组合查询) 3.model 多对多操作. 4.中间件 :在请求到达url前先会经过 ...
- Django学习之七:Django 中间件
目录 Django 中间件 自定义中间件 - - - 大体两种方式 将中间件移除 实例 中间件加载源码阅读 总结 Django 中间件 Tips: 更新日志: 2019.01.31 更新django中 ...
- Django中间件 及 form 实现用户登陆
Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件的5种自定义方法
阅读目录(Content) Django中间件 自定义中间件 中间件(类)中5种方法 中间件应用场景 回到顶部(go to top) Django中间件 在http请求 到达视图函数之前 和视图函 ...
- Python自动化之Django中间件
django中间件 Django请求生命周期 中间件中可以定义方法,分别是 process_request(self,request) process_view(self, request, call ...
- Django中间件如何处理请求
Django中间件 在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法. Django1.9版本以后中间件的执行流程 1. ...
随机推荐
- linux常用命令学习笔记
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载. 默认视图: 当想看系统负载时,可观察汇总的%CPU中的 ...
- Perl处理数据(二):tr和y///
tr和y///是等价的.用来实现一一映射,但也有额外的功能,就像Linux下的tr命令一样. 用法: tr/SEARCH/REPLACEMENT/cdsr y/SEARCH/REPLACEMENT/c ...
- (2)编译安装lamp三部曲之mysql-技术流ken
简介 采用yum安装lamp简单,快捷,在工作中也得到了普遍应用.但是如果我们需要某些特定模块功能,以及制定安装位置等,就需要用到编译安装了,接下来将编译安装lamp之mysql. mysql的简介网 ...
- mysql+高可用MMM
一. MMM 简介:MMM 即 Multi-Master Replication Manager for MySQL:mysql 多主复制管理器,基于 perl 实现,关于 mysql 主主复制配置的 ...
- T-SQL:qualify和window 使用(十七)
1.qualify 是一个潜在的额外筛选器 主要用于对开窗函数的数据筛选 SELECT orderid, orderdate, val, RANK() OVER(ORDER BY val DESC) ...
- 阅读Java Native源码前的准备
前言 读java native源代码时,我们一般会去网站下载openjdk8源码http://download.java.net/openjdk/jdk8/promoted/b132/openjdk- ...
- 汇编语言--微机CPU的指令系统(五)(字符串操作指令)
(11)字符串操作指令 字符串操作指令的实质是对一片连续存储单元进行处理,这片存储单元是由隐含指针DS:SI或ES:DI来指定的.字符串操作指令可对内存单元按字节.字或双字进行处理,并能根据操作对象的 ...
- CSS3布局之box-flex的使用
语法: box-flex:<number> 其中number取值:使用浮点数指定对象所分配其父元素剩余空间的比例.设置或检索伸缩盒对象的子元素如何分配其剩余空间.(伸缩盒最老版本) htm ...
- 洛谷P4593 [TJOI2018]教科书般的亵渎(拉格朗日插值)
题意 题目链接 Sol 打出暴力不难发现时间复杂度的瓶颈在于求\(\sum_{i = 1}^n i^k\) 老祖宗告诉我们,这东西是个\(k\)次多项式,插一插就行了 上面的是\(O(Tk^2)\)的 ...
- Windows 10文件夹Shirt+鼠标右键出现“在此处打开命令窗口”
Windows 10文件夹Shirt+鼠标右键出现“在此处打开命令窗口” Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directo ...