列表从后往前读

#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-节流-总结完结篇的更多相关文章

  1. 解剖SQLSERVER 完结篇 关于Internals Viewer源代码

    解剖SQLSERVER 完结篇 关于Internals Viewer源代码 大家可能都用过Internals Viewer这个软件 <查看SQLSERVER内部数据页面的小插件Internals ...

  2. (视频)《快速创建网站》 4.2 完结篇 – 应用运营vs.发射卫星,遥测(Telemetry) 技术

    本文是<快速创建网站>系列的第10篇(完结篇),如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文.访问本系列目录,请点击:http://devopshub.c ...

  3. 不就是抽个血吗,至于么-jQuery,Linux完结篇

    hi 趁着周一去抽血化验,真开心...下午报告才出来,不过早上来了就开始各种晕菜,叫错名字,说错话.....至于么.. 还有在教研室的30天就可以肥家了,凯森凯森.今天不想干活(哪天想干过我就问问), ...

  4. 直接拿来用!最火的Android开源项目(完结篇)

    直接拿来用!最火的Android开源项目(完结篇) 2014-01-06 19:59 4785人阅读 评论(1) 收藏 举报 分类: android 高手进阶教程(100) 摘要:截至目前,在GitH ...

  5. ASP.NET 5系列教程(七)完结篇-解读代码

    在本文中,我们将一起查看TodoController 类代码. [Route] 属性定义了Controller的URL 模板: [Route("api/[controller]") ...

  6. Android 实现书籍翻页效果----完结篇

    By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前由于种种琐事,暂停了这个翻页效果的实现,终于在这周末完成了大部分功能,但是这里只是给出了一个基本的雏形,没有添 ...

  7. 《BackboneJS框架的技巧及模式》(4)完结篇

    <BackboneJS框架的技巧及模式>(4)完结篇 本文紧接第二部分:<BackboneJS框架的技巧及模式(3)> 作者:chszs,转载需注明.博客主页:http://b ...

  8. 实现app上对csdn的文章查看,以及文章中图片的保存 (制作csdn app 完结篇)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24022165 今天给大家带来CSDN的完结篇,即增加文章的查看和文章中图片的保存 ...

  9. Cocos2dx游戏开发系列笔记13:一个横版拳击游戏Demo完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 写下这些东西的同时 旁边放了两部电影 周星驰的<还魂夜> 甄子丹的<特殊身份& ...

  10. Knockout应用开发指南 第十章:更多信息(完结篇)

    原文:Knockout应用开发指南 第十章:更多信息(完结篇) 1   浏览器支持 Knockout在如下浏览器通过测试: Mozilla Firefox 2.0+(最新测试版本:3.6.8) Goo ...

随机推荐

  1. 使用excel进行数据挖掘(3)----类别检測

    使用excel进行数据挖掘(3)----类别检測 在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/artic ...

  2. 设计模式入门之代理模式Proxy

    //代理模式定义:为其它对象提供一种代理以控制对这个对象的訪问 //实例:鉴于书中给出的样例不太好.并且有些疑问,所以直接用保护代理作为实例 //要求,一旦订单被创建,仅仅有订单的创建人才干够改动订单 ...

  3. js mudules.js

    var InsertRow={ isMoveRow:false, // 是否存在动态移动行 curSelRowIndex:"", // 当前选中行序号 prevSelRowInde ...

  4. Laravel-HTTP-验证

    Laravel-HTTP-验证 标签(空格分隔): php 第一种方式 **1 直接在controller里完成表单验证** **2 打印验证返回的错误信息 dd($errors)** 第二种方式 * ...

  5. mysql裸文件备份XtraBackup (innobackupex)

    结构如下: 热备分为逻辑备份和裸文件备份. 裸文件备份比逻辑备份在速度上更快一些,因为它在底层复制数据文件.世界上唯一一款开源的,能够对INNODB和XtrDB数据库进行热备的开源工具. 他的优点是备 ...

  6. HCF4094(CD4094)应用

    管脚说明和内部逻辑图 注:管脚图为HCF4094,内部逻辑图为CD4094(HCF4094内部逻辑图在datasheet不清晰,且复杂). 其中控制管脚有3个:STROBE-DATA-CLOCK,Ou ...

  7. 响应式流API的构建基础

    下面三个重要的概念是响应式流API的构建基础: 发布者是事件的发送方,可以向它订阅. 订阅者是事件订阅方. 订阅将发布者和订阅者联系起来,使订阅者可以向发布者发送信号. http://www.info ...

  8. schema文件及XML文件的DOM和Sax解析

    schema文件 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="htt ...

  9. linux 删除命令注意事项(大神勿看)

    在做软连接的时候,想到一个问题,如果删除软连接,会不会删除源文件. 如果删除是真删除的话,一旦操作错误那就后悔去吧. 效果是这样的:#rm -rf pp/          如果pp是软连文件夹,那么 ...

  10. [APIO2016]Gap

    题目:UOJ#206. 题目大意:由于过于冗长,不好解释,所以详见原题. 解题思路:这是一道交互题. 对于第一问,很容易解决.由于数列严格递增,所以不会出现相等的情况. 首先调用MinMax(0,10 ...