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 ...
随机推荐
- 安装windows下安装mysql
参考文档:https://www.cnblogs.com/reyinever/p/8551977.html https://www.jb51.net/article/151213.htm 首先下载m ...
- 执行git pull时提示Connection reset by 13.229.188.59 port 22
问题如下图: 解决办法: 1. 2. 3. 4. 5. 6.
- kotlin中对象表达式
在kotlin中,也有类似的功能,但不是匿名类,而是对象,需要使用object关键字,对象要继承的列需要与object之间的冒号(:)分隔. fun main(arg: Array<String ...
- Java静态方法和实例方法区别详解
静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方 ...
- Unit Testing, Integration Testing and Functional Testing
转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...
- 【Qt开发】Qt5 中对 C++11 一些新特性的封装
C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性. 而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C ...
- jackson 实体转json 为NULL或者为空不参加序列化【转载】
原博客:https://www.cnblogs.com/yangy608/p/3936848.html 1.实体上 /** * 将该标记放在属性上,如果该属性为NULL则不参与序列化 * 如果放在类上 ...
- Elasticsearch 追加更新
追加更新,学名不知道叫啥,我这里指在历史数据的基础上,追加数据更新.比如 价格数据,我在价格字段里面保存了一个每天价格的数组,追加更新的时候在数组的后面直接add,而不是像一般情况那样覆盖. ES追加 ...
- 【VS开发】CString 转为 char *方法大全
[VS开发]CString 转为 char *方法大全 标签(空格分隔): [VS开发] 方法1: CString strTemp; char szTemp[128]; strTemp = _T(&q ...
- iostream
cout 星号*为默认 控制符 描 述 控制符 描 述 *dec 以十进制形式输出整数 hex 以十六进制形式输出整数 oct 以八进制形式输出整数 fixed 以普通小数形式输出浮点数 scient ...