如何启用中间件
将其添加到 Django 配置文件settings.py的 MIDDLEWARE 配置项列表中。
Django中可以不使用任何中间件,如果你愿意的话,MIDDLEWARE 配置项可以为空。但是强烈建议至少使用 CommonMiddleware,最好是保持默认的配置,这有助于你提高网站的安全性。
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',
]
中间件的执行顺序
在请求阶段,调用视图之前,Django 按照定义的顺序执行中间件 MIDDLEWARE,自顶向下。
Django内置的中间件
Cache:缓存中间件
如果启用了该中间件,Django会以CACHE_MIDDLEWARE_SECONDS 配置的参数进行全站级别的缓存。
Common:通用中间件
禁止DISALLOWED_USER_AGENTS中的用户代理访问服务器
自动为URL添加斜杠后缀和www前缀功能。如果配置项 APPEND_SLASH 为True ,并且访问的URL 没有斜杠后缀,在URLconf中没有匹配成功,将自动添加斜杠,然后再次匹配,如果匹配成功,就跳转到对应的url。 PREPEND_WWW 的功能类似,为url添加www.前缀。
为非流式响应设置Content-Length头部信息。
GZip:内容压缩中间件
用于减小响应数据的体积,降低带宽压力,提高传输速度。
该中间件必须位于其它所有需要读写响应体内容的中间件之前,此时数据还未被压缩。
如果存在下面情况之一,将不会压缩响应内容:
内容少于200 bytes
已经设置了 Content-Encoding 头部属性
请求的 Accept-Encoding 头部属性未包含 gzip.
可以使用 gzip_page()装饰器,为视图单独开启GZip压缩服务。
Conditional GET:有条件的GET访问中间件,很少使用。
Locale:本地化中间件
用于处理国际化和本地化,语言翻译。
Message:消息中间件
基于cookie或者会话的消息功能,比较常用。
Security:安全中间件
django.middleware.security.SecurityMiddleware中间件为我们提供了一系列的网站安全保护功能。主要包括下列所示,可以单独开启或关闭:
SECURE_BROWSER_XSS_FILTER