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. sql server 查询某个表被哪些存储过程调用

    sql server 查询某个表被哪些存储过程调用 select distinct object_name(id) from syscomments where id in (select id fr ...

  2. RPM 包的构建 - 实例

    打包目录 rpm 打包目录有一些严格的层次上的要求. rpm 的版本 <=4.4.x,rpmbuid 工具其默认的工作路径是 /usr/src/redhat.因为权限的问题,普通用户不能制作 r ...

  3. bash的基础特性

    命令历史:history 环境变量: HISTSIZE: 命令历史的条数 HISTFILE:~/.bash_history HISTFILESIZE: 命令历史文件记录历史的条数 history -d ...

  4. 在客户端先通过JS验证后再将表单提交到服务器

    问题:想要在客户端先通过JS验证后再将表单提交到服务器 参考资料: jQuery 事件 - submit() 方法 试验过程: 服务器端使用PHP <html> <head> ...

  5. python 简单的串口收发数据

    # -*- coding: utf- -*- import serial #打开串口 serialPort="COM3" #串口 baudRate= #波特率 ser=serial ...

  6. 从github上下载java项目导入到eclipse中

    转载地址:https://blog.csdn.net/chyo098/article/details/79268136

  7. CentOS7.5下安装、配置mariadb --CentOS7.5

    1.安装mariadb [root@VM_39_157_centos bin]# yum -y install mariadb-server 2.启动mariadb服务 [root@VM_39_157 ...

  8. Linux下执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory

    原因是 文件的格式是dos,修改为unix 就OK了 查看文件格式  用vim 打开出错的文件    按 ESC键     再按shift+冒号   输入 set  ff  回车   可以看见 该文件 ...

  9. NFine中权限判断出错的问题

    NFine中权限判断出错的问题 问题描述:登录后点击栏目一,弹出了窗口一,再点击栏目二,弹出了窗口二,然后再点击窗口一,再执行窗口一中的操作时,发现已没有任何权限,调试后发现在HandlerAutho ...

  10. 6月23 Ajax传地址

    利用Ajax将图片存入数据库的过程中可能会出现路径乱码或不一致的现象因此要对其进行编码解码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...