rest_framework-节流-总结完结篇
列表从后往前读 #1.在request中获取IP
#2.访问记录 VISIT_RECORD = {} 放缓存 数据库 都可以 建议缓存
import time
class VisitThrottle(object):
"""10s内只能访问3次"""
def __init__(self):
self.history = None def allow_request(self, request, view):
#1.在request中获取IP
#2.访问记录
#remote_addr = request._request.META.get('REMOTE_ADDR')
remote_addr = request.META.get("REMOTE_ADDR") #都可以
ctime = time.time()
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr] = [ctime,]
history = VISIT_RECORD.get(remote_addr)
self.history = history
while history and history[-1] < ctime - 10:
history.pop() if len(history) < 3:
history.insert(0, ctime)
return True
return True #表示可以继续访问
#return False #访问频率太高,被限制 def wait(self):
"""还需要等多少秒"""
ctime = time.time()
data = 60 - (ctime - self.history[-1])
return data throttle_classes = [VisitThrottle,] #全局配置
REST_FRAMEWORK = {
"DEFAULT_THROTTLE_CLASSES":['api.utils.throttle.VisitThrottle']
} 源码流程
check_throttles
self.get_throttles 内置函数
from rest_framework.throttling import BaseThrottle class BaseThrottle(object):
def allow_request(self,request, view) #由这个函数进行触发
def get_ident(self,request):
def wait(self): 到时可以使用SimpleRateThrottle
from rest_framework.throttling import SimpleRateThrottle class VisiThrottle(SimpleRateThrottle):
scope = "xiao" #当KEY使用 当在setting设置DEFAULT_THROTTLE_RATES : {"xiao":'3/m'} m分 h时 d天
def get_cache_key(self, request, view):
return request.META.get("REMOTE_ADDR") class VIPThrottle(SimpleRateThrottle):
scope = "vip" #当KEY使用 当在setting设置DEFAULT_THROTTLE_RATES : {"xiao":'3/m'} m分 h时 d天
def get_cache_key(self, request, view):
return request.user.username #认证时的对象的username
Settings里面添加
REST_FRAMEWORK = {
"DEFAULT_THROTTLE_CLASSES":['cmdb.utils.throttle.Visit2Throttle'], #此时不能在这里添加两个控制
"DEFAULT_THROTTLE_RATES": {
"xiao": '3/m',
"vip":'10/m', #vip用户访问频率限制
}
} 基本使用
类 继承:BaseThrottle 实现:allow_request, wait
类 继承:SimpleRateThrottle 实现:get_cache_key 、 scope = "xiao" (配置文件中的key)
rest_framework-节流-总结完结篇的更多相关文章
- 解剖SQLSERVER 完结篇 关于Internals Viewer源代码
解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...
- (视频)《快速创建网站》 4.2 完结篇 – 应用运营vs.发射卫星,遥测(Telemetry) 技术
本文是<快速创建网站>系列的第10篇(完结篇),如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文.访问本系列目录,请点击:http://devopshub.c ...
- 不就是抽个血吗,至于么-jQuery,Linux完结篇
hi 趁着周一去抽血化验,真开心...下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话.....至于么.. 还有在教研室的30天就可以肥家了,凯森凯森.今天不想干活(哪天想干过我就问问), ...
- 直接拿来用!最火的Android开源项目(完结篇)
直接拿来用!最火的Android开源项目(完结篇) 2014-01-06 19:59 4785人阅读 评论(1) 收藏 举报 分类: android 高手进阶教程(100) 摘要:截至目前,在GitH ...
- ASP.NET 5系列教程(七)完结篇-解读代码
在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...
- Android 实现书籍翻页效果----完结篇
By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前由于种种琐事,暂停了这个翻页效果的实现,终于在这周末完成了大部分功能,但是这里只是给出了一个基本的雏形,没有添 ...
- 《BackboneJS框架的技巧及模式》(4)完结篇
<BackboneJS框架的技巧及模式>(4)完结篇 本文紧接第二部分:<BackboneJS框架的技巧及模式(3)> 作者:chszs,转载需注明.博客主页:http://b ...
- 实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24022165 今天给大家带来CSDN的完结篇,即增加文章的查看和文章中图片的保存 ...
- Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇
懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...
- Knockout应用开发指南 第十章:更多信息(完结篇)
原文:Knockout应用开发指南 第十章:更多信息(完结篇) 1 浏览器支持 Knockout在如下浏览器通过测试: Mozilla Firefox 2.0+(最新测试版本:3.6.8) Goo ...
随机推荐
- 使用excel进行数据挖掘(3)----类别检測
使用excel进行数据挖掘(3)----类别检測 在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/artic ...
- POJ 3088
已知n,求n中取k(k<=n)个数组成的m(m<=n)个的集合的排列数. 于是,可以枚举选出k个数及枚举m个集合.这个很明显是二类斯特林数.而集合有序,则乘上m! #include < ...
- Swift开发教程--怎样使UITableViewController背景透明
self.tableView.backgroundView? .backgroundColor = UIColor.clearColor(); self.tableView.backgroundCol ...
- POJ-3264-Balanced Lineup-单点更新
题目链接:id=3264">http://poj.org/problem? id=3264 这是一个单点更新的模板题,就不详解了,HDU敌兵布阵那题我有详解:链接:http://blo ...
- hadoop相关
执行wordcount 代码 package org.apache.hadoop.examples; import java.io.IOException; import java.util.Iter ...
- base标签的作用是什么
转自:https://www.cnblogs.com/chenqiBlog/p/9517905.html base标签是HTML语言中的基准网址标记,它是一个单标签,位于网页头部文件的head标签内, ...
- Linux命令详解./configure,make,make install的作用
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...
- zookeeper客户端命令行操作
一.命令行 (1)使用zookeeper安装bin目录下的./zkCli.sh连接到zookeeper服务器上,基本语法如下: ./zkCli.sh -timeout 0 -r -server ip: ...
- oc语言的特点
oc语言的特点分为以下几个方面: 1.运行时: 2.block闭包: 3.内存管理: 4.大中枢派发: 一.运行时的基础是isa 类结构:由clang编译前端支撑. 从它衍生出以下几个特征: 1.消息 ...
- confluence6.0.3安装文档
一.Atlassian Confluence 6.0.3安装文档包含内容 1.wiki的安装步骤: 2.旧系统迁移中碰到的无法编辑和问题和解决方案: 3.wiki源码安装包.连接mysql用的jar包 ...