django中间件-12
在django中,中间件其实就是一个类,他是一个可以介入django的 request 和 response 的钩子框架,在请求响应不同的阶段,执行类中不同的代码,用于在全局修改django的输入输出。
自定义中间件
自定义中间件有两种方式,使用函数定义,和使用类定义。
自定义中间件一般定义在项目目录或者‘应用目录下的 middleware.py 文件下。
函数定义
def simple_middleware(get_response):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
return middleware
示例
def simple_middleware(get_response):
print("django被初始化")
def middleware(request):
print("请求")
response = get_response(request)
print("响应")
return response
return middleware
访问视图执行结果
django被初始化
[20/Oct/2018 09:44:54] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
类定义
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
def __call__(self, request):
# 此处编写的代码会在每个请求处理视图前被调用。
response = self.get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
示例
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
print("初始化")
def __call__(self, request):
print("请求")
response = self.get_response(request)
print("响应")
return response
访问视图执行结果
django初始化
[20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
与旧版本中间件的兼容
在Django 1.10版本之前,中间件设置名为MIDDLEWARE_CLASSES,是长这样的:
class Middleware(MiddlewareMixin):
def __init__(self, get_response=None):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
self.get_response = get_response
def process_request(self, request):
# 此处编写的代码会在每个请求处理视图前被调用。
def process_response(self, request, response):
# 此处编写的代码会在每个请求处理视图之后被调用。
return response
示例
class Middleware(MiddlewareMixin):
def __init__(self, get_response=None):
print("django初始化")
self.get_response = get_response
def process_request(self, request):
print("请求")
def process_response(self, request, response):
print("响应")
return response
访问视图执行结果
django初始化
[20/Oct/2018 10:13:34] "POST /middleware HTTP/1.1" 200 12
请求
视图函数
响应
- 参数get_response代表被访问的视图函数
中间件的执行顺序
中间件的执行顺序和注册顺序有关系。在视图函数处理前,会按注册顺序从上往下执行。在属兔函数处理后,会按注册顺序从上往下执行, 在初始化的时候,也是从下往上执行。

示例
定义两个中间件
def simple_middleware(get_response):
print("django被初始化")
def middleware(request):
print("请求")
response = get_response(request)
print("响应")
return response
return middleware
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
print("初始化")
def __call__(self, request):
print("请求")
response = self.get_response(request)
print("响应")
return response
注册顺序
MIDDLEWARE = [
'middleware.middleware.simple_middleware',
'middleware.middleware.SimpleMiddleware',
执行结果
初始化2
django被初始化1
请求1
请求2
视图函数
响应2
响应1
django中间件-12的更多相关文章
- Django数据操作F和Q、model多对多操作、Django中间件、信号、读数据库里的数据实现分页
models.tb.objects.all().using('default'),根据using来指定在哪个库里查询,default是settings中配置的数据库的连接名称. 外话:django中引 ...
- day20 FORM补充(随时更新),F/Q操作,model之多对多,django中间件,缓存,信号
python-day20 1.FROM生成select标签的数据应该来源于数据库. 2.model 操作 F/Q (组合查询) 3.model 多对多操作. 4.中间件 :在请求到达url前先会经过 ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django中间件之SessionMiddleware源码分析
settings.py文件中 MIDDLEWARE = [ 'django.contrib.sessions.middleware.SessionMiddleware', ] # from djang ...
- django 中间件
django处理一个Request的过程是首先通过django 中间件,然后再通过默认的URL方式进行的.所以说我们要做的就是在django 中间件这个地方把所有Request拦截住,用我们自己的方式 ...
- Django学习之七:Django 中间件
目录 Django 中间件 自定义中间件 - - - 大体两种方式 将中间件移除 实例 中间件加载源码阅读 总结 Django 中间件 Tips: 更新日志: 2019.01.31 更新django中 ...
- Django中间件的使用
Django中间件的使用 中间件(middleware) 中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应 ...
- Django中间件 及 form 实现用户登陆
Django中间件 及 form 实现用户登陆 Form 验证 密码调用md5 加密存储 form.add_error("字段名", "错误信息") 自定义错误 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
随机推荐
- 关于C#线程,线程池和并行运算的简单使用和对比
转自:https://www.cnblogs.com/jeffwongishandsome/archive/2010/11/12/1876137.html 先大概看一下控制台应用程序的Main方法的主 ...
- selenium&PhantomJS笔记
配置pip文件 Windows下pip 配置文件的位置%HOME%/pip/pip.ini linux下安装pip,以Debian Linux为例su -apt-get install python- ...
- 使用Reflector反编译并提取源代码
Reflector是一个强大的.net 反编译工具,有时我们不止需要反编译源代码,更需要提取源代码. Reflector本身不自带提取源代码功能,不过可以借助插件Reflector.FileDisas ...
- System.Web.Optimization对脚本和样式表的操作
这个也是本章重点向描述的部分,首先我们可以使用VS2012RC来新建一个MVC4.0项目,版本可以为4.0或4.5.在Global.asax文件代码中,我们发现已经把过滤器,路由器,以及对样式表和脚本 ...
- flask 的管理模块的功能add_template_global、send_from_directory
add_template_global方法 全局模板函数 add_template_global 装饰器直接将函数注册为模板全局函数. add_template_global 这个方式是自定义的全局函 ...
- OC实用转换model的工具
OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点 ...
- 转载:从程序员的角度看ASCII, GB2312, UNICODE, UTF-8
以下内容转自博客:http://blog.chinaunix.net/uid-22670933-id-1771613.html. 一.字符编码是怎么回事 0. 概念 字节是计算机的最基本存储单位,一个 ...
- Python实例---CRM管理系统分析180331
注意:一个项目基本都设计增删改查,且第一个需要做的就是设计表结构 思维导图: 组件使用: Django + bootStrap + Jquery 数据库表结构设计: 外键关联: 2种方式, ...
- Nodejs和npm入门使用
目录 引子 何为node.js 和 npm 怎么使用node.js和npm 安装node.js & npm npm init 初始化项目(创建node.js模块) Package.json 属 ...
- php算法基础----时间复杂度和空间复杂度
算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...