扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
前言
成都创新互联公司专注于企业营销型网站、网站重做改版、孟村网站定制设计、自适应品牌网站建设、H5响应式网站、成都做商城网站、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为孟村等各大城市提供网站开发制作服务。开发平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用.
DRF就为我们提供了一些频率限制的方法.
DRF中的版本、认证、权限、频率组件的源码是一个流程,且频率组件在最后执行.
DRF频率组件原理
DRF中的频率控制基本原理是基于访问次数和时间的,当然我们也可以通过自己定义的方法来实现.
当请求进来,走到我们的频率组件时,DRF内部会有一个字典来记录访问者的IP.
以这个字典的IP为key,value为一个列表,存放访问者每次访问的时间:{PI1: [第三次访问时间, 第二次访问时间, 第一次访问时间, ]}
把每次访问的最新时间放入列表的最前面,记录这样一个数据结构后,通过如下方式限制:
如果我们设置的是10秒内只能访问5次:
1.判断访问者的IP是否在这个请求IP的字典里.
2.保证这个列表里都是都是最近10秒内访问的时间.
判断当前请求时间和列表里最早的(也就是最后一个)请求时间差
如果差大于10秒,说明请求不是最近10秒内的,删除掉最后一个
继续判断倒数第二个、第三个,直到差小于10秒为止
3.判断列表的长度(即访问次数)是否大于我们设置的5次.
如果大于,则限制其访问
如果小于,则放行,并把时间记录到列表的最前面
使用自带的频率限制类
首先 配置频率限制类
from rest_framework.throttling import SimpleRateThrottle # 导入内置的频率限制类 class DRFThrottle(SimpleRateThrottle): """注意:这里都是必备的属性、方法和返回值""" scope = 'WD' def get_cache_key(self, request, view): # 拿IP地址 return self.get_ident(request)
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流