DRF - 频率
目录
频率组件
1.频率限制
访问频率的限制,可以进行对爬虫等恶意行为进行预防。
使用drf的频率限制对网站接口访问,只需要直接进行配置即可
2.频率认证步骤
(1)编写一个频率类,继承【频率模块】中的SimpleRateThrottle
- 编写频率类,继承
SimpleRateThrottle
,也可以继承BaseThrottle
但是要写的代码更加复杂
from rest_framework.throttling import BaseThrottle, SimpleRateThrottle
(2)重写get_cache_key
方法,在源码中发现该方法需要两个参数request和view,来进行频率认证
(3)配置一个类属性:scope = 'xxx'
(4)在配置文件中配置:
DEFAULT_THROTTLE_RATES
中,字典的键值需要和频率类中的scope
的值对应
'DEFAULT_THROTTLE_RATES': { 'xxx': '5/m', # m代表分, h代表时, d代表day }
(5)全局使用和局部使用
3.全局使用和局部使用
(1)局部权限:对单独的视图类生效
在视图类中,通过throttle_classes
来进行限制认证
class BookDetailView(ViewSetMixin, RetrieveAPIView): """查询单个""" queryset = Book.objects.all() serializer_class = BookSerializer "局部认证" throttle_classes = [CommonThrottle]
(2)全局权限:对于全局的视图类生效
settings.py在配置文件中配置
REST_FRAMEWORK = { # 【频率】的全局配置 'DEFAULT_THROTTLE_CLASSES': [ 'app01.throttling.CommonThrottle' ], # 【频率限制】 'DEFAULT_THROTTLE_RATES': {'book_5_m': '5/m'}, }
(3)全局权限 + 局部禁用
在全局的基础上,进行局部视图类的频率不进行校验
class BookDetailView(ViewSetMixin, RetrieveAPIView): # 列表为空,则为局部禁用 throttle_classes = []
4.代码演示
throttling.py - 频率
# 编写频率类,继承SimpleRateThrottle,也可以继承BaseThrottle但是要写的代码更加复杂 from rest_framework.throttling import BaseThrottle,SimpleRateThrottle # 频率类 class CommonThrottle(SimpleRateThrottle): # 类属性,属性值随便写 # 配置文件中配置字典的键值需要与scope对应 scope = 'xxx' # 重写 get_cache_key方法,该方法也有两个参数request, view def get_cache_key(self,request,view): # 1 对于用户访问频率的限制,可以通过ip 或者用户的id来判断 # 用户客户端的ip地址,在asgi 的request.META 中可以找到,放在REMOTE_ADDR键值对中 return request.META.get('REMOTE_ADDR')
views.py - 视图类中
在视图类中可以通过局部配置来控制是否进行频率校验
class BookDetailView(ViewSetMixin, RetrieveAPIView): """查询单个""" queryset = Book.objects.all() serializer_class = BookSerializer "局部频率限制" throttle_classes = []
settings.py - 配置文件中
REST_FRAMEWORK = { # 【频率】的全局配置 'DEFAULT_THROTTLE_CLASSES': [ 'app01.throttling.CommonThrottle' ], # 【频率限制】 'DEFAULT_THROTTLE_RATES': {'xxx': '5/m'}, }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY