You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:52