Django中间件和中间件不是同一种东西

什么是中间件:中间件是一个很大的概念,只要程序和程序之间还有一层程序,用来处理两个程序的整个交互过程的请求、数据等等就叫中间件

Django中间件:介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

中间件还有服务器中间件(tomcat,jboss),数据库中间件、消息队列中间件

Django内置的中间件

process request  #请求来了触发该方法

process response   #请求走触发该方法

自定义中间件

在项目app01目录下自定一个py文件,名字自定

PS:中间件可以代替装饰器,完成登陆验证等

urls.py

from django.conf.urls import url
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^middletest/$',views.middletest)
]

views.py

from django.shortcuts import render,HttpResponse,redirect

def middletest(request):
print('视图函数:middletest')
print(request.aa) #这里可以直接打印对象中的参数
return HttpResponse('我是中间件测试视图方法')

mymiddleware.py  #这个是自定义中间件的文件

from django.shortcuts import render,HttpResponse,redirect
from django.utils.deprecation import MiddlewareMixin #自定义中间件要导入这个模块 class MyMiddle1(MiddlewareMixin): # 一定要继承MiddlewareMixin这个对象
def process_request(self, request): # request就是当次请求的request对象
print('我是MyMiddle1的process_request的方法')
request.aa = 'ooo' #这里给对象定义了一个参数
# if not request.session.get('name'): 这里可以判断发送过来的请求是否有值,实现登录认证
# return HttpResponse('您没有登录请先登录')
# return HttpResponse('返回') 如果这里有return值,则后面的中间件不会再执行,包括视图函数也不会执行,这个原理就是做拦截,当返回值不是None的时候,后续的中间件就不会再走
def process_response(self,request,response):
print('我是MyMiddle1的process_response方法')
return response class MyMiddle2(MiddlewareMixin): # 一定要继承MiddlewareMixin这个对象
def process_request(self, request):
print('我是MyMiddle2的process_request的方法')
def process_response(self, request, response): #这个respones就是视图文件里的middletest这个函数对象
print('我是MyMiddle2的process_response方法')
response.set_cookie('name','lqz') #这个就是向对象里面写cookie
return response #这里一定要返回对象

settings.py

可以看到进来的时候是顺序执行,出去的时候是由下而上执行的

中间件可以做什么:

1、做访问频率限制

2、做登录认证

django自带的中间件中 

django.middleware.csrf.CsrfViewMiddleware

这个中间件是一个防止跨站请求伪造攻击的 CSRF就是跨站请求伪造

场景:比如在浏览器已经登录了银行的网站,然后打开了一个黑客网站,当你点击这个非法网站的时候会利用浏览器朝招商银行发一个转账请求,银行从cookie判断非法网站发过去的请求是合法的,然后账户里的钱被盗取了

所以django已经给我们处理了跨站请求伪造攻击,每次请求都会带一个随机的字符串,这样合法网站的返回请求的时候会携带这个随机字符串,黑客在伪造请求的时候没有随机字符串,这样银行的网站就不会通过假的请求

(28)django的中间件(自定义中间件和防范跨站请求伪造攻击)-重要的概念的更多相关文章

  1. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  2. ajax向Django前后端提交请求和CSRF跨站请求伪造

    1.ajax登录示例 urls.py from django.conf.urls import url from django.contrib import admin from app01 impo ...

  3. django之cookies,session 、中间件及跨站请求伪造

    cookies 和session 为什么会有cookie? ​ 由于http协议是无状态的,即用户访问过后,不留痕迹(状态可以理解为客户端和服务器在某次会话中产生的数据,那无状态的就以为这些数据不会被 ...

  4. Django框架之跨站请求伪造

    跨站请求伪造(英语:Cross-site request forgery),也被称为one-click attack或者session riding,通常缩写为CSRF或者XSRF, 是一种挟制用户在 ...

  5. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)

    一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...

  6. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块

    CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...

  7. Django框架(十六)-- 中间件、CSRF跨站请求伪造

    一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...

  8. Django框架(十二)-- 中间件、CSRF跨站请求伪造

    中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...

  9. Django框架(十七)—— 中间件、CSRF跨站请求伪造

    目录 中间件 一.什么是中间件 二.中间件的作用 三.中间件执行顺序 四.自定义中间件 1.导包 2.定义类,继承MiddlewareMixin 3.在视图函数中定义一个函数 4.在settings的 ...

随机推荐

  1. Sublime text 3 For LINUX 注册方法&关闭更新提示

    在 /etc/hosts 文件加入以下 127.0.0.1 www.sublimetext.com 127.0.0.1 license.sublimehq.com 然后再Sublime输入以下注册码 ...

  2. SpringCloud学习2-Springboot监控模块(actuator)

    前言 学习一项新技术最大的困难是什么? 是资料.让人高兴的是找到了一本系统学习Spring Cloud的教程,<Spring Cloud微服务实战>, 接下来的学习目标将以此书顺序演进. ...

  3. 论文笔记:Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language Association

    Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language ...

  4. 使用flask搭建服务端

    ---恢复内容开始--- 本文默认采用python3 一.虚拟环境 创建环境 mkdir myproject cd myproject python3 -m venv venv //Windows平台 ...

  5. 解决Firefox显示“已阻止载入混合活动内容”的方法

    今天把项目放到服务器上了,调试的时候出现“已阻止载入混合活动内容……”的报错: 解决方法如下: 方法1:让Firefox暂时不阻止 打开新标签页,在地址栏输入 about:config,进入配置页面. ...

  6. Java 中断

    https://zhuanlan.zhihu.com/p/45667127 看的似懂非懂

  7. Spring框架基础

    1         Spring框架 1.1           Spring的基本概念 是一个轻量级的框架,提供基础的开发包,包括消息.web通讯.数据库.大数据.授权.手机应用.session管理 ...

  8. windows下如何批量修改文件名

    windows下如何批量修改文件名 一.总结 一句话总结:就是用excel生成了多条修改文件名的dos命令然后执行,比较核心的就是把图片名称导入excel 将图片名称导入excel---编写如下DOS ...

  9. 下载并配置jdk

    ①下载jdk安装到本机,这里是jdk8下载地址,请根据自己机子的环境进行下载 https://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  10. 基于c#的windows基础设计(学习日记2)【关于多态】

    这次的多态很简单,没什么知识点 . 直接贴代码了: public abstract class Animal //建立一个抽象类 { private bool m_sex; private strin ...