REST framework:限流
对接口访问的频次进行限制,以减轻服务器压力(反爬虫的一种手段)。
一、前期知识准备
-
-
限制所有匿名未认证用户,使用IP区分用户。
-
使用DEFAULT_THROTTLE_RATES['anon'] 来设置频次
-
-
UserRateThrottle
-
限制认证用户,使用User id 来区分。
-
使用DEFAULT_THROTTLE_RATES['user']来设置频次
-
-
ScopedRateThrottle
-
限制用户对于具体视图的访问频次,通过ip或user id。
-
REST_FRAMEWORK = { # 限流规则 'DEFAULT_THROTTLE_RATES': { 'anon': '10/minute', # 未认证的用户,每分钟10次 'user': '10000/minute' # 认证的用户,每分钟10000次 }, # 限流策略 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle' ], }
-
-
second:每秒
-
minute:每分钟
-
hour:每小时
-
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'user': '3/minute' } }
二、实操
1、全局配置生效(针对项目的所有接口)
在settings.py文件下面,添加如下:
REST_FRAMEWORK = { # 限流策略 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle', 'rest_framework.throttling.ScopedRateThrottle', ], # 限流规则 'DEFAULT_THROTTLE_RATES': { 'anon': '10/minute', # 未认证的用户,每分钟10次 'user': '10000/minute' # 认证的用户,每分钟10000次 'durant': '4/minute', #此前面的key:durant,自定义 }, }
2、局部配置生效(针对某个视图类)
class UserView(ModelViewSet): # 指定模型类查询集 queryset = UserInfo.objects.all() # 指定序列化器类 serializer_class = UserInfoSerializer # 类视图中指定限流类型---认证用户 throttle_classes = (UserRateThrottle,) # 类视图中指定限流类型---匿名用户 throttle_classes = (UserRateThrottle,) # 类视图中指定限流类型---IP,下面的value需和settings配置的值一致 throttle_scope = 'durant'
知道、想到、做到、得到
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)