Django--middleware 详解
面对的问题:
当我们的一个网站上线后有可能遇到一些恶意的访问、比如来自对手的web爬虫;我看过一些lowB的对手,它们IP地址都不换一个的,也不
在行为上做伪装。
1、可行方法一:
在每一个view中都对IP进行测试、如果IP地址在黑名单中、那么就给它返回一个空的结果;明显这不是一个好的方法 1:)每上view中都有、
不方便维护
2、可行方法二:
使用django中的middleware功能、对每一个request、response对象做统一的处理
middleware原理:
middleware在逻辑上就相当于view的防火墙、所有的request都要经过middleware才能到达view、
view中的所有response都要经过middleware才能到达用户端、大概的流程如下:
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
|---->|-- request --> | middle 层统一处理 | -- request --> | view 处理特定的逻辑|
浏览器 | | middle 层统一处理 | | view 处理特定的逻辑|
|<----|<-- response --- | middle 层统一处理 | <-- response --- | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
例子:
定义一个middleware用于演示middleware的用法
第一步:在项目中增加一人叫middlewares.py的文件用于保存middleware的定义

from django.http import HttpResponse class MdMiddleWare(object):
def __init__(self,get_response):
"""
"""
self.get_response = get_response def __call__(self,request):
"""
"""
return HttpResponse("你的IP 被屏蔽了")
定义一个叫MdMiddleWare的中间件、它会拦截所有的请求直接返回"你的IP被屏蔽了"
第二步:激活MdMiddleWare中间件
要激活中间件只要在项目的settings.py中进行设置就行了

设置的代码如下:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'md.middlewares.MdMiddleWare',
]
第三步:测试访问
由于我在middleware中IP都没有测试一下、就直接返回“你的IP 被屏蔽了” 所以再也没有人可以访问到我的view、这个明显是有问题的;
但是没空了,改天再写吧。
----
Django--middleware 详解的更多相关文章
- Django -- settings 详解
Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...
- Django -- settings 详解(转)
Django -- settings 详解 Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件详解
Django中间件详解 中间件位置 WSGI 主要负责的就是负责和浏览器和应用之家沟通的桥梁 浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ,当app数据返 ...
- Middleware详解
Middleware详解 在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章 ...
- Django路由详解
一.路由基础 1.路由url函数:路由自上而下进行匹配:url(正则路径,视图函数内存地址,默认参数,路由别名) 2.路由正则: 规定开始:^ | 规定结束:$ #url(r'index', view ...
- 很详细的Django入门详解
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!采用了MVC的框架模式,即模型M,视图V和控制器C,也可以称为MVT模式,模型M,视图V,模板T.在学 ...
- Django框架详解之url
Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...
- django 常用 详解
Django 1 django框架介绍 是一个开源框架,2005年发布,采用Python语言编写的,早期时主要做新闻和内容管理的网站 Django本身提供了非常强大的后台管理系统 看中文说明文档 百度 ...
- Django session 详解-part II-session
Django中的session是一个高级工具,它可以让用户存储个人信息以便在下次访问网站中使用这些信息.session的基础还是cookie,但是它提供了一些更加高级的功能.请看下面的一个例子: 使用 ...
随机推荐
- mysql系统变量
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html Table 5.2 System Variable Summar ...
- electron vue 开发客户端程序
文档知识点 https://electronjs.org/docs/tutorial/about (1)Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Ma ...
- Android——自定义多击事件
一:使用场景 Android本身内置了点击.双击事件,但是某些时候,我们可能需要多击事件. 例如:某个秘密入口,为了避免用户误操作点击.双击到了触发开关而进入到不该被用户看到的页面,我们可以为入口控件 ...
- Hibernate学习笔记五:反向工程快速开发
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6768513.html 一:反向工程 Myeclipse提供由 数据库表 生成 java pojo 和 hib ...
- XML的四种解析方法
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6646572.html XML文档以层级标签的形式来组织数据,多用于配置文件.存储静态数据.交换数据. ...
- SSM:spring+springmvc+mybatis框架中的XML配置文件功能详细解释(转)
原文:https://blog.csdn.net/yijiemamin/article/details/51156189# 这几天一直在整合SSM框架,虽然网上有很多已经整合好的,但是对于里面的配置文 ...
- 视频转换ffmpeg
使用yum在centos下安装ffmpeg ffmpeg -i IMG_1893.MOV -ab 56 -ar 22050 -b 500 -r 15 -s 640x480 test.mp4 说 ...
- ContentResolver.query()—>buildQueryString()
Cursor cursor = context.getContentResolver().query(Sms.CONTENT_URI, new String[]{"threa ...
- ios中NSObject分类(2)
#import <Foundation/Foundation.h> UIColor * rgb(int r, int g, int b); UIColor * rgbA(int r, in ...
- Eclipse启动分析。。
最近研究了一下Eclipse的启动过程,查了点资料,也有点收获.下面是搜集到的一个比较好的说明,共享下... 在Eclipse启动过程中,Eclipse.exe负责启动,也就是把startup.jar ...