提供速率限制支持的夸脱扩展。
Quart-Rate-Limiter的Python项目详细描述
夸脱速率限制器是Quart的扩展,允许速率限制为 按路线定义和执行。429错误响应 包括符合RFC7231的 Retry-Afterheader和成功的响应包含头 符合RateLimit Header Fields for HTTPRFC 草稿。在
使用
要添加速率限制,请先使用初始化速率限制扩展 申请书
app=Quart(__name__)rate_limiter=RateLimiter(app)
或者通过工厂模式
^{pr2}$现在,您可以使用 ^{tt2}
@app.route('/')@rate_limit(1,timedelta(seconds=10))asyncdefhandler():...
或者使用 limit_blueprint函数
blueprint=Blueprint("name",__name__)limit_blueprint(blueprint,1,timedelta(seconds=10))
或者要对应用程序中的所有路由应用速率限制,请定义默认值 初始化速率限制器时的限制
rate_limiter=RateLimiter(default_limits=[RateLimit(1,timedelta(seconds=10))])
然后豁免一条路线
@app.route("/exempt")@rate_exemptasyncdefhandler():...
要更改远程用户的标识,您可以提供 初始化分机或每条路线时的全局键功能 基础。在
默认情况下,速率限制信息(TAT)将存储在存储器中, 如果多个工人 用过。为了解决这个问题,可以通过安装 redisextra(pip install quart-rate-limiter[redis])然后 这样用
fromquart_rate_limiter.redis_storeimportRedisStoreredis_store=RedisStore(address)RateLimiter(app,store=redis_store)
这个商店使用aioredis, 以及传递给^{tt6}的任何额外关键字参数$ 构造函数将传递给aiorediscreate_redis函数。在
自定义存储是可能的,请参见RateLimiterStoreABC中的 所需接口。在
简单示例
将路由限制为每秒1个请求,最多每分钟20个请求
@app.route('/')@rate_limit(1,timedelta(seconds=1))@rate_limit(20,timedelta(minutes=1))asyncdefhandler():...
或者,limits参数可以用于多个限制
@app.route('/')@rate_limit(limits=[RateLimit(1,timedelta(seconds=1)),RateLimit(20,timedelta(minutes=1)),],)asyncdefhandler():...
根据转发的IP而不是 直接IP(如果在负载平衡器后面)
asyncdefkey_function():# Return the X-Forwarded-For as the user-agent identifier,# unless it isn't present (direct connection).returnrequest.headers.get("X-Forwarded-For",request.remote_addr)RateLimiter(app,key_function=key_function)
key_function是一个协程函数,允许会话查找 如果合适的话。在
贡献
夸脱速率限制器是在GitLab上开发的。非常欢迎你来 打开issues或 提议merge requests。在
测试
测试夸脱速率限制器最好的方法是用毒物
$ pip install tox $ tox
这将检查代码样式并运行测试。在
帮助
这个自述是最好的开始,然后尝试打开 issue。在
- 项目
标签: