Django REST如何设置节流周期为每10分钟允许一次请求?
Django REST框架实现每10分钟1次请求的节流方案
嘿,这个问题我刚好熟悉,来给你唠清楚~
首先直接给结论:你不能把周期参数单独设置成1/10min这种形式,但完全可以通过合法的rate格式实现每10分钟允许1次请求的需求。
为什么不能用1/10min作为周期参数?
官方文档里说的「周期参数」指的是时间单位本身(比如s/sec/m/min这些),而不是包含数字的组合。所以单独把周期设成1/10min是不符合规则的,但这并不影响我们实现目标——因为节流的rate参数支持「请求次数+数字+单位」的组合格式。
正确的实现方式
DRF的节流rate参数格式是[请求次数]/[数字+单位],其中单位必须是官方允许的那些(s/sec/m/min/h/hour/d/day)。要实现每10分钟1次请求,你可以这样写:
1. 自定义节流类
如果你需要给特定视图单独设置规则,可以自定义一个节流类:
from rest_framework.throttling import UserRateThrottle class TenMinuteOnceThrottle(UserRateThrottle): # 这里的rate就是合法格式:1次请求 / 10分钟 rate = '1/10min' # 也可以写成'1/10m',效果完全一样
然后在视图中使用这个节流类:
from rest_framework.response import Response from rest_framework.views import APIView class MyLimitedView(APIView): throttle_classes = [TenMinuteOnceThrottle] def get(self, request): return Response({"status": "success", "message": "每10分钟只能访问一次哦~"})
2. 全局配置节流规则
如果要给所有视图统一设置这个规则,可以在settings.py里配置:
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.UserRateThrottle', # 针对登录用户 # 'rest_framework.throttling.AnonRateThrottle', # 针对匿名用户,按需开启 ], 'DEFAULT_THROTTLE_RATES': { 'user': '1/10min', # 'anon': '1/10min', } }
小提醒
确保你的DRF版本是较新的(一般3.x及以上都支持),老旧版本可能对带数字的周期格式支持有限。
内容的提问来源于stack exchange,提问作者pythad
相关产品推荐
相关产品推荐

