drf频率组件
1.简介
控制访问频率的组件
2.使用
手写一个自定义频率组件
import time #频率限制 #自定义频率组件,return True则可以访问,return False则不能访问 class MyThrottle(): visitor_dic={} def __init__(self): self.history=None def allow_request(self,request,view): ''' {'ip1':[时间1,时间2], 'ip2':[时间1,], } ''' # 基本原理 #1.取出访问者ip #2.判断当前ip不在访问字典里,添加进去,并且直接返回True,表示第一次访问,在字典里,继续往下走 #3.循环判断当前ip的列表,有值,并且当前时间减去最后一个时间大于60s,把这种数据pop掉,这样列表中只有60s以内的访问时间, #4.判断,当列表小于3,说明一分钟以内访问不足三次,把当前时间插入到列表第一个位置,返回True,顺利通过 #5.当大于等于3,说明一分钟内访问超过三次,返回False验证失败 #META:请求所有的东西的字典 ip=request.META.get('REMOTE') print(ip) #不在字典中,说明是第一次访问 ctime=time.time() if ip not in self. visitor_dic: self.visitor_dic[ip]=[ctime,] return True #根据当前访问者ip,取出访问的时间列表 history=self.visitor_dic[ip] self.history=history while history and ctime -history[-1]>60: #pop默认是删除最后一项的 history.pop() if len(history)<3: #把当前时间放到第0个位置上, history.insert(0,ctime) return True return False #设定了访问频率,则要设定wait函数,返回的是剩余时间 def wait(self): ctime=time.time() return 60-(ctime-self.history[-1])
真正写一个频率组件
在settings里写配置
REST_FRAMEWORK={ 'DEFAULT_THROTTLE_CLASS':['app01.MyAuth.MyThrottle',], 'DEFAULT_THROTTLE_RATES':{'aaa':'3/m'} }
在MyAuth进行定义
from rest_framework.throttling import SimpleRateThrottle class MyThrottle(SimpleRateThrottle): #scope要与settings里进行对应,可以找到限制的频率 scope='aaa' def get_cache_key(self, request, view): #内部做了啥事 #返回ip地址 #ip=request.META.get('REMOTE_ADDR') #return ip #这里返回的是ip,如果想限制域名,则下面返回的则需要是域名 return self.get_ident(request)
可以在views里进行重写错误信息
class Authors(APIView): throttle_classes = [MyAuth.MyThrottle, ] # authentication_classes = [MyAuth.LoginAuth,] # permission_classes = [MyAuth.UserPermission,] def get(self, request): response = {'status': 100, 'msg': '查询成功'} ret = models.Author.objects.all() author_ser = MySer.AuthorSerializer(ret, many=True) response['data'] = author_ser.data return JsonResponse(response, safe=False) # 重写错误显示信息 def throttled(self, request, wait): class MyThrottled(exceptions.Throttled): default_detail = '煞笔' extra_detail_singular = '还剩{wait}秒' extra_detail_plural = '还剩{wait}秒' raise MyThrottled(wait)
全局使用,在settings里进行设置
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': ['app01.MyAuth.MyThrottle', ], 'DEFAULT_THROTTLE_RATES': { 'aaa': '10/m' } }
drf频率组件的更多相关文章
- drf 频率组件 META字典详情
drf频率组件 什么是频率 控制用户对某个url的请求频率,比如一分钟之内,只能访问三次 自定义频率规则 1.取出访问者ip 2.判断当前ip在不在访问字典中: 不在,则添加进去,返回True; 3. ...
- DRF框架(七) ——三大认证组件之频率组件、jwt认证
drf频率组件源码 1.APIView的dispatch方法的 self.initial(request,*args,**kwargs) 点进去 2.self.check_throttles(re ...
- 【DRF频率】
目录 使用自带的频率限制类 使用自定义的频率限制类 开发平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. DRF就为我们提供了一些频率限制的方法. DRF中的版本.认证.权限 ...
- DRF(5) - 频率组件、url注册器、响应器、分页器
一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...
- DRF之权限认证频率组件
概要 retrieve方法源码剖析 认证组件的使用方式及源码剖析 权限组件的使用方式及源码剖析 频率组件的使用方式及源码剖析 知识点复习回顾 Python逻辑运算 知识点复习回顾一:Python逻辑运 ...
- Django框架深入了解_03(DRF之认证组件、权限组件、频率组件、token)
一.认证组件 使用方法: ①写一个认证类,新建文件:my_examine.py # 导入需要继承的基类BaseAuthentication from rest_framework.authentica ...
- drf框架 - 三大认证组件 | 认证组件 | 权限组件 | 频率组件
RBAC 基于用户权限访问控制的认证 - Role-Based Access Control Django框架采用的是RBAC认证规则,RBAC认证规则通常会分为 三表规则.五表规则,Django采用 ...
- drf token刷新配置、认证组件(使用)、权限组件(使用)、频率组件(使用)、异常组件(使用)
目录 一.特殊路由映射的请求 二.token刷新机制配置(了解) 三.认证组件项目使用:多方式登录 1.urls.py 路由 2.views.py 视图 3.serializers.py 序列化 4. ...
- drf三大组件之频率认证组件
复习 """ 1.认证组件:校验认证字符串,得到request.user 没有认证字符串,直接放回None,游客 有认证字符串,但认证失败抛异常,非法用户 有认证字符串, ...
随机推荐
- java保存动态代理生成的类的class文件
启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
- 企业应用打包的时候 修改ipa包的bundle identifier
1.将ipa包后缀改为.zip,解压,之后打开包文件,找到info.plist文件后,修改相应的项就可以了.把修改后的文件重新压缩成zip,把zip改为ipa,替代原来的ipa,就可以了. 解决这个问 ...
- nodejs的koa2框架
官网文档 cnpm i --save-dev koa2 koa-router koa-body koa-static request npm install --save koa2 const koa ...
- 爬虫----爬虫请求库selenium
一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...
- Django----认证系统和auth模块
COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...
- db2 表空间扩容
DB2表空间扩容 1 - Detect what tablespace has size issues db2 list tablespaces show detail 2 - Check the p ...
- 难以接受你的改变:从project.json到.csproj
自从微软做了一个艰难的决定——.NET Core彻底放弃project.json,全面改回.csproj——至今,虽然赞美之声不断,但我依然不喜欢也难以接受这样的改变. 难以接受主要有两方面的原因: ...
- ecshop安装后打开管理页面时报500错误
昨天给朋友安装ecshop,遇到如下问题: 1.PHP不支持mysql扩展 打开http://localhost/install/index.php,第二步时候,报不支持mysql. ecshop是前 ...
- [No0000174]Spring常用注解(收藏大全)
Spring部分 1.声明bean的注解 @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @C ...
- [No0000EE]主要的宏观经济指标查询
主要的宏观经济指标查询 国内:东财>经济数据 _ 数据中心:http://data.eastmoney.com/center/macro.html东财>经济数据 :http://data. ...