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. Python入门 更换pip源的方法

    pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple ...

  2. How to use “cat” command on “find” command's output?

    You can do this with find alone using the -exec action: find /location -size 1033c -exec cat {} + {} ...

  3. 若快打码平台python开发文档修改版

    一.打码的作用 在进行爬虫过程中,部分网站的登录验证码是比较简单的,例如四个英文数字随机组合而成的验证码,有的是全数字随机组成的验证码,有的是全中文随机组成的验证码.为了爬虫进行自动化,需要解决自动登 ...

  4. P2922 [USACO08DEC]秘密消息Secret Message

    传送门 思路: 还是比较水的(不看题解不看书),用 vis 存字典树上的每个点是多少个单词的前缀,bo 来存每个点是多少个单词的结尾(坑点:会有很多相同的单词,不能只有 bool 来存).统计时:① ...

  5. Kotlin 条件控制

    IF 表达式 一个 if 语句包含一个布尔表达式和一条或多条语句. // 传统用法 var max = a if (a < b) max = b // 使用 else var max: Int ...

  6. IDEA复制某个类的包名路径

    在对应的类中右键: 然后看图:

  7. Ubuntu 16.04上搭建CDH5.16.1集群

    本文参考自:<Ubuntu16.04上搭建CDH5.14集群> 1.准备三台(CDH默认配置为三台)安装Ubuntu 16.04.4 LTS系统的服务器,假设ip地址分布为 192.168 ...

  8. C# wnform 请求http ( get , post 两种方式 )

    1.Get请求 string strURL = "http://localhost/WinformSubmit.php?tel=11111&name=张三";System. ...

  9. NOIp 2018 D2T1 旅行//未完成

    这个题没有认真读的话就会写下以下的DD代码 #include<bits/stdc++.h> #define N 5010 using namespace std; int n,m; int ...

  10. encodeURIComponent编码与解码

    问题:JavaScript用encodeURIComponentt编码后无法再后台解码的问题. 目前写法: window.self.location="list.jsp?searchtext ...