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内置过滤器的详细介绍,包括过滤器的功能.语法.代码和效果示例. ...
随机推荐
- 数据算法 --hadoop/spark数据处理技巧 --(1.二次排序问题 2. TopN问题)
一.二次排序问题. MR/hadoop两种方案: 1.让reducer读取和缓存给个定键的所有值(例如,缓存到一个数组数据结构中,)然后对这些值完成一个reducer中排序.这种方法不具有可伸缩性,因 ...
- vue路由--动态路由
前面介绍的路由都是路径和组件一对一映射的 有时候需要多个路径映射到一个组件,这个组件根据参数的不同动态改变,这时候需要用到动态路由 动态路由这样定义路由路径: path: '/foo/:id'--可以 ...
- 【HDU - 2859 】Phalanx (dp 最大对称子图)
Phalanx 先搬翻译 Descriptions: 给你一个矩阵,只由小写或大写字母构成.求出它的最大对称子矩阵的边长. 其中对称矩阵是一个k*k的矩阵,它的元素关于从左下角到右上角的对角线对称.例 ...
- Ubuntu18.04-Java8安装
添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get update 安装oracle-java-installer sudo ...
- ID生成器之——别人家的方案and自家的方案
“叮咚,叮咚……”,微信提示音一声接一声,声音是那么的频繁,有妖气,待俺去看一看. 这天刚吃完午饭,打开微信,发现我们的技术讨论组里有 100 多条未读消息,心想,是不是系统出问题了?怎么消息那么频繁 ...
- 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)
为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...
- Python实现进度条的4种方式
这里只列举了部分方法,其他方法或python库暂时还没使用到 马蜂窝刷粉丝[微信:156150954] 1.不用库,直接打印: 代码样例: import time #demo1 def process ...
- 虚拟机中给linux 系统添加硬盘以后,进行分区挂载
当自己虚拟机中的linux 系统硬盘不够用的时候需要添加硬盘给系统使用,所以可以通过以下的步骤实现 1.关闭自己的客户机,然后执行以下步骤 2. 上面的步骤完成以后,重点来了,下面打开客户机,执行以下 ...
- 【转载】sql-builder介绍
原文链接:sql-builder介绍 关于sql-builder sql-builder尝试使用java对象,通过类SQL的拼接方式,动态快速的生成SQL.它可作为稍后的开源项目ibit-mybati ...
- js删除对象数组
若用remove删除某个对象数组,使用for循环遍历数组中的每个对象进行删除,则必须从数组的最后一个元素倒序删除,否则每次删除都只能删除数组的一半元素,因为把索引为0的子节点删除后那么很自然的原来索引 ...