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

如何为带变量URL的Flask路由按id单独配置flask_limiter限流?

实现Flask路由按id变量单独限流

当前你的限流规则是针对整个路由生效,要实现同一IP对每个id每分钟仅可请求1次,但不同id可各请求1次的需求,只需通过Flask-Limiter的key_func参数自定义限流标识即可,具体操作如下:

  1. 定义一个自定义限流键生成函数,将客户端IP与路由中的id变量组合,作为唯一限流标识:
from flask import request

def ip_plus_id_key():
    # 获取客户端IP
    client_ip = request.remote_addr
    # 获取路由中的id参数
    target_id = request.view_args.get('id', '')
    # 返回IP+id的组合键
    return f"{client_ip}:{target_id}"
  1. 修改AsyncStatus类的限流装饰器,传入自定义的key_func:
class AsyncStatus(Resource):
    decorators = [limiter.limit("1/minute", key_func=ip_plus_id_key)]
    def get(self, id = ''):
        # 你的业务逻辑代码
        return {"status": "success", "requested_id": id}

也可以直接在get方法上使用装饰器,效果一致:

class AsyncStatus(Resource):
    @limiter.limit("1/minute", key_func=ip_plus_id_key)
    def get(self, id = ''):
        # 你的业务逻辑代码
        return {"status": "success", "requested_id": id}

原理说明

Flask-Limiter默认使用客户端IP作为限流标识,通过自定义key_func返回IP+id的组合键后,限流规则会对每个IP+id的独立组合进行计数,从而实现同一IP对不同id可分别触发限流规则的效果。

内容的提问来源于stack exchange,提问作者Db0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:35:24