Django内置的中间件
内置中间件
1. django.middleware.gzip.GZipMiddleware:相应数据进行压缩。如果内容长度少于200个长度,那么就不会压缩。
在settings.py文件中配置MIDDLEWARE,添加:django.middleware.gzip.GZipMiddleware中间件,
之后,在浏览器中访问网页,查看Response Headers中的Content-Length与没有开启GZip中间件之前的Content-Length对比。就可以看出源代码在加载的时候确实是被压缩了。但是如果访问的网页的内容少于200个字符,就不会被压缩。
2.django.contrib.messages.middleware.MessageMiddleware:消息处理相关的中间件。
这个与我们之前涉及到的messages的上下文处理器非常相似,都是为了在多个模板中可以使用我们返回给模板的变量,并且简化操作。
3.django.contrib.auth.middleware.AuthenticationMiddleware:会给request添加一个user对象的中间件。
用户的授权中间件,该中间件必须在sessionmiddleware后面。
4.django.middleware.csrf.CsrfViewMiddleware:CSRF保护的中间件。
SessionMiddleware必须出现在CsrfMiddleware之前。
5.django.middleware.clickjacking.XFrameOptionsMiddleware:做了clickjacking攻击的保护。
clickjacking保护是攻击者在自己的病毒网站上,写一个诱惑用户点击的按钮,然后使用iframe的方式将受攻击的网站(比如银行的网站)加载到自己的网站上去,并将其设置为透明的,用户就看不到了,然后再把受攻击的网站(比如银行网站)的转账按钮定位到病毒网站的按钮上,这样用户在点击病毒网站上的按钮的时候,实际上点击的是受攻击的网站(比如银行的网站)上的按钮,从而实现了在不知不觉中给攻击者转账的功能。
该中间件的作用就是为http请求的response设置一个http的请求头,如果这个response中包含xframe_options_exempt=True,就不要再设置X-Frame-Options了。如果设置X-Frame-Options为SAMEORIGIN,这就意味着该response可以被本网站的加载为一个frame,而不能被其它网站的加载为一个frame。在你的项目的settings.py中开启这个中间件,就会在你的django项目中设置X-Frame-Options为DENY。
6.django.middleware.security.SecurityMiddleware:做了一些安全处理的中间件。比如设置XSS防御的请求头,比如做了http协议转为https协议的工作等。
7.django.contrib.sessions.middleware.SessionMiddleware:session中间件。会给request添加一个处理好的session对象。
8.缓存中间件:用来缓存一些页面
(1)django.middleware.cache.UpdateCacheMiddleware.
(2)django.middleware.cache.FetchFromCacheMiddleware
内置中间件防止的顺序:
1.SecurityMiddleware:应该放到最前面。因为这个中间件并不需要依赖任何其他的中间件。如果你的网站同时支持http协议和https协议,并且你想让用户在使用http协议的时候重定向到https协议,那么就没有必要让他执行下面的中间件再重定向,这样效率更高。
2.UpdateCacheMiddleware:应该在GZipMiddleware,SessionMiddleware,LocalMiddleware之前。
3.GZipMiddleware。
4.ConditionalMiddleware。
5.SessionMiddleware。
6.LocaleMiddleware。
7.CommonMiddleware。
8.CsrfViewMiddleware。
9.AuthenticationMiddleware。
10.MessageMiddleware。
11.FetchFromCacheMiddleware。
12.FloatpageFallbackMiddleware。
13.RedirectFallbackMiddleware。
各个中间件的路径
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.gzip.GZipMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware'
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
<!--以下两个中间件在settings文件中配置时,会出现:RuntimeError: Model class django.contrib.sites.models.Site doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.-->
<!--'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',-->
<!--'django.contrib.redirects.middleware.RedirectFallbackMiddleware',-->
]
Django内置的中间件的更多相关文章
- Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
- 框架----Django内置Admin
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
- Django内置Admin解析
Django 内置的admin是对于model中对应的数据表进行增删改查提供的组建 一.Django admin的内部依赖: 依赖的app django.contrib.auth django.con ...
- Django内置分页
一.django内置分页 from django.shortcuts import render from django.core.paginator import Paginator, EmptyP ...
- Django 内置分页器
先导入Django内置的分页器 在商品列表页或者购物车列表页导入 在渲染list.html导入 然后在views后台渲染方法写入 打开list页面结果
- Django内置权限扩展案例
当Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建 ...
- Django内置模版过滤器
Django内置过滤器总览 可以查询下表来总览Django的内置过滤器: 过滤器 说明 add 加法 addslashes 添加斜杠 capfirst 首字母大写 center 文本居中 cut 切除 ...
- Django内置模板标签
Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...
- Django内置过滤器详解附代码附效果图--附全部内置过滤器帮助文档
前言 基本环境 Django版本:1.11.8 Python版本:3.6 OS: win10 x64 本文摘要 提供了常用的Django内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. ...
随机推荐
- 038.Python关于TCP黏包问题
黏包现象 1 黏包现象演示 服务端 #服务端 import socket sk = socket.socket() # 注册主机到网络 sk.bind( ("127.0.0.1", ...
- ubuntu下安装secureCRT(含破解方法)
一.下载SecureCRT安装文件及破解文件: 链接: https://pan.baidu.com/s/1A7opflFKSUi13PkzVCnhDQ 密码: gbf5 二.下载完成安装文件后安装Se ...
- Docker Compose 模板文件 V2
模板文件是使用Compose的核心,默认模板文件名称为docker-compose.yml ,格式为YAML格式. 目录结构 [root@localhost ~]# tree /opt/compose ...
- iptables 实例
开启ip段192.168.1.0/24端的80口 开启ip段211.123.16.123/24端ip段的80口 # iptables -I INPUT -p tcp --dport 80 -j DRO ...
- 对CAN signal 的一点理解
首先每个 ECU是一个网络节点,每个网络节点可收发一些 Message,每个Message 由CAN signals构成.每个 CAN signal利用一个或多个连续的2进制位来表示承载的信息.下 ...
- python网络爬虫(二)requests库的基本介绍和使用
一.requests库的七个重要方法 (1)最常用方法:requests.get(url,params=None,**kwargs)//对应HTTP协议的GET()操作 (请求获得URL位置的资源) ...
- Java自学-多线程 同步synchronized
Java 多线程同步 synchronized 多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问题 多线程的问题,又叫Concurrency 问题 步骤 1 : 演示同步问题 假设盖 ...
- 关于Redis缓存预热的思考
系统上线时,提前将相关的缓存数据直接加载到缓存系统.避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题. 这里我考虑2个问题: A.哪些数据需要预热? B.如何预热? 关于问题A,根据不同的业 ...
- windows的启动、引导配置
Win+S -> msconfig
- App自动化测试环境搭建
只做记录和注意点,详细内容不做解释 环境:win+appium+夜神模拟器+python 需要用到的工具: 1.java JDK 2. node.js 3. Android SDK 4.Appium- ...