Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,全局修改Django的输入或输出。
中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
因为改变的是全局,所以需要谨慎实用,用不好会影响到性能
中间件执行顺序
如果你想修改请求,例如被传送到view中的HttpRequest
对象。 或者你想修改view返回的HttpResponse
对象,这些都可以通过中间件来实现。
可能你还想在view执行之前做一些操作,这种情况就可以用 middleware
来实现。
Django默认的中间件:(在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES
变量,其中每一个元素就是一个中间件,如下图)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
# 为request/response提供了几种xss脚本过滤的安全改进,无它不安全
'django.contrib.sessions.middleware.SessionMiddleware',
# 开启session会话支持,无它无session
'django.middleware.common.CommonMiddleware',
# 基于APPEND_SLASH和PREPEND_WWW的设置来重写URL,
# 如果APPEND_SLASH设为True,并且初始URL 没有以斜线结尾以及在URLconf 中没找到对应定义,这时形成一个斜线结尾的新URL;
# 如果PREPEND_WWW设为True,前面缺少 www.的url将会被重定向到相同但是以一个www.开头的ur
'django.middleware.csrf.CsrfViewMiddleware',
# 添加跨站点请求伪造的保护,通过向POST表单添加一个隐藏的表单字段,并检查请求中是否有正确的值,无它无csrf保护
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 在视图函数执行前向每个接收到的user对象添加HttpRequest属性,表示当前登录的用户,无它用不了request.user
'django.contrib.messages.middleware.MessageMiddleware',
# 开启基于Cookie和会话的消息支持,无它无message
'django.middleware.clickjacking.XFrameOptionsMiddleware',
# 对点击劫持的保护
]
注册中间件 在*django*项目的*settings*模块中,在 `MIDDLEWARE_CLASSES` 变量中添加自定义中间件python MIDDLEWARE = [ ... 'book.middleware.my_middleware', # book为应用名,middleware为文件名 'book.middleware.SimMiddleware' ]
项目启动时,中间件的初始化