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(文件名) 其他常用命令: 其他常用命令: 通过类创 ...
随机推荐
- 多线程环境的UI控件属性更新
Winform: public delegate void UpadataTextCallBack(string str,TextBox text); public void UpadtaText(s ...
- Maplace.js – 小巧实用的 jQuery 谷歌地图插件
Maplace.js是一个小的显示谷歌地图的 jQuery 插件,帮助你把谷歌地图嵌入到你的网站,快速在地图位置上创建标记和控制菜单.它需要 jQuery 和谷歌地图 API v3 支持,所以这两个都 ...
- ElasticSearch 5.0.1 java API操作
今天来说下使用ES 5.0.1的API来进行编码. 开始之前,简单说下5.0.1跟之前的几个变化.之前的ES自身是不支持delete-by-query的,也就是通过查询来删除,可以达到批量的效果,是因 ...
- JavaScript中的splice方法
splice方法根据传入的不同参数可分别实现删除和插入操作 使用splice(pra1,pra2,pra3)方法,需要为其提供如下参数: 1.pra1为其起始索引(即希望开始添加元素的地方) 2.pr ...
- pip常见操作收录
由于这些东西比较容易忘掉,在这里几下吧 1. pip 对应用进行安装: sudo pip install your_app 2. pip 对应用进行update sudo pip install ...
- caffe安装过程中遇到的问题以及解决方法
1. 在安装依赖库的时候,遇到: @gxjun-Latitude-E5440:~$ sudo apt-get install libatlas-base-dev 正在读取软件包列表... 完成 正在分 ...
- 如何用JS判断推广链接所属的客服
今天有一个客户提出一个需求:网站有多个在线客服,每个客服都有自己的网站推广链接,当访客通过该客服的推广链接进入网站时,必须指定由该客服接待. 我的实现思路是获取推广链接中特定字符,然后判断字符对应的客 ...
- vs中部分快捷键
ctrl + r ctrl + r ctrl 按两次r修改变量名(修改被引用到的变量名),不同于ctrl + f(修改全部相同名字的) ctrl +r ctrl + m 先选中一部分da ...
- MVC3 新建项目
一.安装工具 二.新建项目 step1:新建MVC3项目 打开新建项目窗口,在“已安装的模板”列表中选择“Web”,在右侧应用程序模板列表中选择“ASP.NET MVC3 Web应用程序”,修改项目名 ...
- Linux vi
修改linux服务器中的文件内容,使用vi编辑器 1.#vi [文件名] 2.点击i,进入编辑模式 3.要退出按ESC,进入中间模式,按冒号 :后面跟命令 :q! (不保存并退出) :wq (保存 ...