python,django做中间件屏蔽非法访问
我使用django1.6.
django框架没有urlfilter这样的原生中间件,但是灵活的django设计者为我们留下了更自由的渠道。
在没有使用django以前,我没有接触过如此潇洒的编程方式,中间件就是MIDDLEWARE_CLASSES,这个配置在你的settings文件中,当然所有的中间件,包括django的session,cookie中间件,CsrfViewMiddleware中间件,她们都是人家设计大妈为我们写好了类,我们只需要配置一下settings,run server一下就成功驻军我们web应用了。
如果自己不写一次中间件,怎么会了解设计者,django是怎么运行的呢???
废话不说了。
新建一个应用,叫management,然和在此应用下,自己新建一个文件叫:statisti_user_activity.py
中间件的秘密在于 继承和重写方法,然和配置。
三步骤:1创建类
class RqsStatistcsMiddleware(object):
def process_request(self,request):重写方法
然后去settings下配置你这个类。在MIDDLEWARE_CLASSES里写上你的类的应用+类名即可。如我们这个: management.statisti_uset_activity.RqsStatistcsMiddleware
runserver 看看吧。记住MIDDLEWARE_CLASSES的顺序是按照你的配置先后顺序的哦。
中间件的作用:
我平生最恨那些只讲原理不讲试用场景的人,哈哈,做人嘛要给被人一些功夫的适用场景。
一句话行如中间件作用:你最想在别人访问你的程序前作些什么,那么它可以帮你实现。
场景一:你要查看所有request是否是你指定的ip访问:那ok咯
def process_request(self,request):
if request.META.has_key('HTTP_X_FORWARDED_FOR'):
if request.META['HTTP_X_FORWARDED_FOR'] ! = '你想要的妹子的ip':
return HttpResponseForbidden('<h1 style="text-align:center;margin-top:20px;">不好意思,你不是我们蒙娜丽莎!</h1>')
else:
return HttpResponseForbidden('<h1 style="text-align:center;margin-top:20px;">不好意思,你不是我们蒙娜丽莎!</h1>')
可以指定访问,当然可以禁止某些访问了。
场景二:
检查用户访问的行为:比如某些url,是网站权限url,需要验证口令,验证是否付费等等。
场景三:
统计用户访问:以后做定点推送准备
场景四:
统计非法访问,适用新进程计时器,或者redis等发现异常访问次数,做相应操作
总之太多太多,,,还是那句话:你最想在别人访问你的程序前作些什么,那么它可以帮你实现。
哈哈:我是老银,喜欢的大家一起学习,一起讨论。
python,django做中间件屏蔽非法访问的更多相关文章
- python/ Django之中间件
python/ Django之中间件 一.中间件 中间件共分为: (1)process_request(self,request) (2)process_view(self, request, cal ...
- django基于中间件的IP访问频率控制
一.中间件的代码 注意:成功时返回的是None,那样才会走视图层,返回httpresponse就直接出去了 import time from django.utils.deprecation impo ...
- Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块
目录 使用Django对中间件的调用思想完成自己的功能 功能要求 importlib模块介绍 功能的实现 csrf中间件详细介绍 跨站请求伪造 Django csrf中间件 form表单 ajax c ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)
一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 from app01 import views urlpatterns = [ path('admin/', admi ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Django 关闭Debug后使用Nginx做静态文件的访问
Django 关闭Debug后使用Nginx做静态文件的访问 关闭Django 的Debug参数 1 . 修改settings.py配置文件 DEBUG = False 2 . settings.py ...
- 咏南中间件修正了一处BUG,调用中间件插件会报:非法访问
咏南中间件修正了一处BUG,调用中间件插件会报:非法访问将以下方法修改成如下的代码即可function TServerMethods1.GetSvrData(const accountNo, defi ...
- Django:之中间件、微信接口和单元测试
Django中间件 我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下: 也就是说,每一个请求都是先通过中间件中的 pr ...
- python Django知识点总结
python Django知识点总结 一.Django创建项目: CMD 终端:Django_admin startproject sitename(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
随机推荐
- SPSS数据分析—典型相关分析
我们已经知道,两个随机变量间的相关关系可以用简单相关系数表示,一个随机变量和多个随机变量的相关关系可以用复相关系数表示,而如果需要研究多个随机变量和多个随机变量间的相关关系,则需要使用典型相关分析. ...
- (49) odoo context操作
* context 这是一个上下文,运用很灵活 * 得到整个context V7 context=dict(context or {}) 这个版本是明传 V8 self.context_ ...
- autoloader
自动加载 $loader = new Zend_Application_Module_Autoloader(array( 'namespace' => 'Blog', 'base ...
- js 判断IE浏览器,包含IE6/7/8/9
//判断IE6-9的版本,num可取值为6/7/8/9//若不给参数num,仅判断浏览器是否为IE,不判断版本 var isIE = function (num) { if(arguments.len ...
- Linux 设备驱动程序 proc
不能再简化了 #include<linux/module.h> #include<linux/init.h> #include<linux/proc_fs.h> i ...
- iOS开发_数据存储方式
对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUse ...
- python类型转换、数值操作
类型转换 代码 1 函数 描述 2 int(x [,base ]) 将x转换为一个整数 3 long(x [,base ]) ...
- java 字符串转成 json 数组并且遍历
当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时. 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包 String s ...
- JS中的数据类型检测
JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type).原始类型有5种,分别是:数字(Number).字符串(String).布尔值(Bo ...
- SSH项目(1)
1.新建项目,添加jar包 tomcat jsp struts.hibernate.spring 2.配置 web.xml <?xml version="1.0" encod ...