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. .NET 实用扩展方法

    .NET 实用扩展方法(持续更新...) 1. 字符串转换为可空数值类型(int, long, float...类似) /// <summary> /// 将字符串转换成32位整数,转换失 ...

  2. jQuery validator plugin之Validator

    Validator.destroy() Destroys this instance of validator freeing up resources and unregistering event ...

  3. hduoj#1004 -Let the Balloon Rise [链表解法]

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 Problem Description Contest time again! How exci ...

  4. Go 函数方法

    在 Go 语言中,函数和方法不太一样,有明确的概念区分.其他语言中,比如 PHP 函数就是方法,方法 就是函数,但在 Go 语言中,函数是不属于任何结构体.类型的方法,也就是说函数是没有接收者的:而方 ...

  5. Unity3d外包-就找北京动点软件

    承接Unity3d体感企业项目.游戏项目外包 北京公司.专业团队,成员为专业Unity3d产品公司一线开发人员,有大型产品开发经验: 提供优质的售后服务,保证产品质量,轻量级产品可以提供规范清晰的源代 ...

  6. CSS实现输入框宽度随内容自适应效果

    有时候我们会遇到如下需求:输入框的宽度随内容长度自适应,当输入框宽度增大到一定值时,里边的内容自动隐藏. 面对这种需求,我们首先想到的是使用input元素标签,但是发现input标签的宽度默认设定的是 ...

  7. scala操作HBase2.0

    在前面: scala:2.12 hbase:2.0.2 开发工具:IDEA 准备工作: 1.将生产上的hbase中的conf/hbase-site.xml文件拷贝到idea中的src/resource ...

  8. CentOS7.5下安装Python3.7 --python3

    1.将本地安装包上传到远程主机上 scp Python-3.7.0.tgz root@123.206.74.24:/root 2.扩展 安装Python之前安装Python相关的依赖包(主要是u红色部 ...

  9. redis的发布订阅、持久化存储、redis的主从复制

    redis的发布订阅 1. 创建redis配置文件 vim /opt/redis_conf/reids-6379.conf mkdir /data/6379 redis-server  redis-6 ...

  10. Java-Mail邮件开发

    Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务. 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互 ...