Django rest-framework框架-访问频率控制
第一版:
from rest_framework
class VisitThrottle(object):
def __init__(self):
self.history = None def allow_request(self,request,view):
#获取用户IP
#remote_addr = request.META.get('REMOTE_ADDR')
remote_addr = self.get_ident(request)
ctime = time.time()
if remote_addr not in VISIT_RECORD:
VISIT_RECORD[remote_addr] = [ctime,]
return True
history = VISIT_RECORD.get(remote_addr)
self.history = history
while history and history[-1] < ctime - 10: #限制10秒内访问3次
history.pop()
if length(history) < 3:
history.insert(0,ctime)
return True #return False 表示访问频率过高 限制访问 def wait(self): #等待多少秒 才能继续访问
ctime = time.time()
return 60 - (ctime - self.history[-1]) class OrderView(APIView):
"""
订单业务
""" authentication_classes = []
permission_classes = []
throttle_classes = [VisitThrottle,]
def get(self, request, *args, **kwargs): ret = {'code': 1000, 'msg': None, 'data': None}
try:
ret['data'] = ORDER_DICT
except Exception as e:
pass
return JsonResponse(ret)
全局配置:
"DEFAULT_THROTTLE_CLASSES": ["api.utils.throttle.UserThrottle"],
"DEFAULT_THROTTLE_RATES": {
"keyword": '3/m', #限制1分钟内访问3次
"keyword2": '10/m', #限制1分钟内访问10次
},
第二版:
from rest_framework.throttle import SimpleRateThrottle class VisitThrottle(SimpleRateThrottle):
scope = "keyword" def get_cache_key(self, request, view):
return self.get_ident(request) class UserThrottle(SimpleRateThrottle):
scope = "keyword2" def get_cache_key(self, request, view):
return request.user.username
#scope 传递参数给 settings里面的做限制参数使用
"DEFAULT_THROTTLE_RATES": {
"keyword": '3/m', #限制1分钟内访问3次
"keyword2": '10/m', #限制1分钟内访问10次
},
第一版:
- 必须继承 BaseThrottle
- 必须实现 allow_request 和wait 方法
第二版:
- 必须继承 SimpleRateThrottle
- 必须实现 get_cache_key方法 传递参数 scope = “userkey”
- 在settings中 写入限制参数 "userkey": '10/m', #限制1分钟内访问10次
Django rest-framework框架-访问频率控制的更多相关文章
- Django Rest framework 框架之认证使用和源码执行流程
用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...
- Django REST framework框架介绍和基本使用
Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...
- Django Rest Framework框架 ---- url控制器
Django Rest Framework框架 ---- url控制器
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- Django Rest Framework用户访问频率限制
一. REST framework的请求生命周期 基于rest-framework的请求处理,与常规的url配置不同,通常一个django的url请求对应一个视图函数,在使用rest-framewor ...
- Django rest framework 限制访问频率(源码分析)
基于 http://www.cnblogs.com/ctztake/p/8419059.html 当用发出请求时 首先执行dispatch函数,当执行当第二部时: #2.处理版本信息 处理认证信息 处 ...
- Django rest framework框架中有哪些组件
认证 权限(授权) 用户访问次数/频率限制 版本 解析器(parser) 序列化 分页 路由系统 视图 渲染器 认证 自定义认证的类 """ from rest_fram ...
随机推荐
- .net framework 4.0 安装失败解决办法
方法一 1.打开cmd命令窗口 运行net stop WuAuServ 停止更新服务 2.开始----运行------输入%windir% 3.找到SoftwareDistribution的 ...
- BAPI_GOODSMVT_CREATE物料凭证增强字段
项目MSEG 的 BAPI 表增强结构 BAPI_TE_XMSEG 抬头MKPF 的 BAIP 表增强 BAPI_TE_XMKPF 1. 在结构BAPI_TE_XMSEG中appending str ...
- PowerDesigner常用命令
在Tools=>Execute Commands下的Edit/Run Scripts,或者通过Ctrl+Shift+X就可以运行脚本.如图: 1.将所有的表名和列名都修改为大写 '******* ...
- NLP之TF-IDF与BM25原理探究
前言 本文主要是对TF-IDF和BM25在公式推演.发展沿革方面的演述,全文思路.图片基本来源于此篇公众号推文<搜索中的权重度量利器: TF-IDF和BM25>,侵删. 一 术语 TF: ...
- 一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)
导言:原文的作者是著名的Ghost和Spectre 这两个协议的创始团队的领队Aviv Zohar.原文作者说他的这篇原文又是引用了以下这两篇学术论文: How to Explain Zero Kno ...
- laravel5.1设置cookie
Laravel 所建立的 cookie 会加密并且加上认证记号,这代表着被用户擅自更改的 cookie 会失效.从请求中取得Cookie值,你使用cookie方法 $value = $request- ...
- Scrapy框架学习参考资料
00.Python网络爬虫第三弹<爬取get请求的页面数据> 01.jupyter环境安装 02.Python网络爬虫第二弹<http和https协议> 03.Python网络 ...
- 在Ubuntu上安装Intellij IDEA并创建桌面快捷方式
环境信息 版本号 Ubuntu 18.04 LTS Intellij IDEA 2019.1.3 1.首先从官网获取安装包 官方下载地址传送门 然后我就在下载目录下得到了tar.gz的包 2.接下来开 ...
- 深入理解java:5. Java分布式架构
什么是分布式架构 分布式系统(distributed system)是建立在网络之上的软件系统. 内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统. 透明性是指每一个数据库分布节点对用户 ...
- zTree入门使用
简单入门使用,熟悉其功能,没有与异步调用后台数据,用的是本地设置的数据. zTree的API:http://www.treejs.cn/v3/api.php 源码:https://github.com ...