中间件_内置中间件

Django内置中间件

在Django中也内置了很多中间件,这些中间件都放在settings.py文件中的MIDDLEWARE下

例0:Django内置的中间件

 

CommonMiddleware中间件

1、CommonMiddleware中间件也叫通用中间件

2、作用:
    ⑴限制在settings.DISALLOWED_USER_AGENTS中指定的请求头来访问本网站。DISALLOWED_USER_AGENTS是一个正则表达式的列表
    ⑵如果开发者在定义URL的时候,最后有一个斜杠,但是用户在访问的URL的时候没有提交这个斜杠。那么CommonMiddleware就会自动重定向到加了斜杠的URL上
 

作用一

1、前面我们在定义URL的时候都会在URL后面加上一个斜杠(/)。这个斜杠也是URL的一部分(会进行URL匹配)
    ⑴定义URL时,在路径后面加斜杠和不加斜杠,是两个不同的URL

2、如果定义的URL末尾有斜杠,但是我们在访问的时候没有加上斜杠。那么CommonMiddleware中间件就会自动重定向到加了斜杠的URL上

3、注:如果我们定义的URL末尾无斜杠,但是在访问的时候加上了斜杠。那么就会找不到页面(因为URL匹配失败了)
    ⑴所以:CommonMiddleware中间件使用场景是URL定义了斜杠,但是访问时没有加上斜杠

4、反正不管怎么定义URL:在访问和进行URL跳转(前端跳转、后端跳转)时,传入的URL路径必须与定义的URL路径完全一模一样
    ⑴不管是使用URL绝对路径、URL相对路径、URL名字来跳转,都必须正确
    
例1:
⑴定义URL

⑵访问

⑶URL总结


例1_1:
⑴定义URL

⑵访问


作用二

1、作用:限制在settings.DISALLOWED_USER_AGENTS中指定的请求头来访问本网站。DISALLOWED_USER_AGENTS是一个正则表达式的列表
    ⑴用来匹配"User-Agent"的正则表达式是需要编译后的,即使用compile()方法

2、比如,现在很多网站都做了反爬虫。反爬虫最常见的做法就是判断当前请求头中的"User-Agent",值是否是一个浏览器

例2:
⑴查看谷歌浏览器请求头

⑵编辑DISALLOWED_USER_AGENTS

⑶访问:正常访问

⑷访问:为空白字符

⑸访问:为错误字符串

注:
1、这些是通过Django内置的中间件(CommonMiddleware)来完成的,判断的是请求中的request对象(User-Agent)

2、完成地方是在:(request对象)请求到视图函数之间,都没有到视图函数那部分,就请求报错了

 

GZipMiddleware

1、作用:将响应数据进行压缩。如果内容长度少于200个长度,那么就不会压缩

2、即视图函数返回了response对象,且response对象长度大于200,那么就会经过GZipMiddleware中间件压缩,将压缩后的响应传递给前端

3、GZipMiddleware中间件用于response对象:视图函数到浏览器之间

4、将GZipMiddleware中间件放到settings.py中就可以使用这个中间件的功能了:注意中间件的放置顺序,对中间件顺序是有要求的(后面介绍)

例3:
⑴访问:未设置中间件

例3_1:
⑴设置中间件

⑵访问:设置了中间件

 

MessageMiddleware

1、作用:django.contrib.messages.middleware.MessageMiddleware:消息处理相关的中间件

2、这个与我们之前涉及到的messages的上下文处理器非常相似,都是为了在多个模板中可以使用我们返回给模板的变量,并且简化操作

 

SecurityMiddleware

1、django.middleware.security.SecurityMiddleware

2、作用:做了一些安全处理的中间件。比如设置XSS防御的请求头,比如做了http协议转为https协议的工作等

 

SessionMiddleware

1、django.contrib.sessions.middleware.SessionMiddleware

2、作用:session中间件。会给request添加一个处理好的session对象

3、我们之所以能在视图函数中使用"request.session"(属性、方法),就是这个中间件起了作用

例4:
⑴查看源码

 

AuthenticationMiddleware

1、django.contrib.auth.middleware.AuthenticationMiddleware

2、作用:会给request添加一个user对象的中间件。

3、用户的授权中间件,该中间件必须在sessionmiddleware后面

 

CsrfViewMiddleware

1、django.middleware.csrf.CsrfViewMiddleware

2、CSRF保护的中间件

3、这个中间件的话就是,我们在使用表单提交数据时,必须同时提交一个{% csrf_token% }值上来(前面自定义上下文处理器中介绍过)

 

XFrameOptionsMiddleware

1、django.middleware.clickjacking.XFrameOptionsMiddleware

2、作用:做了clickjacking攻击的保护

3、clickjacking保护是攻击者在自己的病毒网站上,写一个诱惑用户点击的按钮,然后使用iframe的方式将受攻击的网站(比如银行的网站)加载到自己的网站上去,并将其设置为透明的,用户就看不到了,然后再把受攻击的网站(比如银行网站)的转账按钮定位到病毒网站的按钮上,这样用户在点击病毒网站上的按钮的时候,实际上点击的是受攻击的网站(比如银行的网站)上的按钮,从而实现了在不知不觉中给攻击者转账的功能。

4、该中间件的作用就是为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。

 

缓存中间件

1、缓存中间件包含两个:
    ⑴django.middleware.cache.UpdateCacheMiddleware
    ⑶django.middleware.cache.FetchFromCacheMiddleware

2、作用:用来缓存一些页面(这个后面单独介绍)

 

内置中间件防止的顺序

1、Djangho中的中间件顺序是不能乱放的,需要保证一定的顺序

2、比如:MessageMiddleware中间件是依靠SessionMiddleware中间的,因此SessionMiddleware必须在MessageMiddleware前面

1.SecurityMiddleware
2.UpdateCacheMiddleware
3.GZipMiddleware
4.ConditionalMiddleware
5.SessionMiddleware
6.LocaleMiddleware
7.CommonMiddleware
8.CsrfViewMiddleware
9.AuthenticationMiddleware
10.MessageMiddleware
11.FetchFromCacheMiddleware
12.FlatpageFallbackMiddleware
13.RedirectFallbackMiddleware

注:
1、SecurityMiddleware:应该放到最前面。因为这个中间件并不需要依赖任何其他的中间件。如果你的网站同时支持http协议和https协议,并且你想让用户在使用http协议的时候重定向到https协议,那么就没有必要让他执行下面的中间件再重定向,这样效率更高。

2、UpdateCacheMiddleware:应该在GZipMiddleware,SessionMiddleware,LocalMiddleware之前。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值