提供速率限制支持的夸脱扩展。

Quart-Rate-Limiter的Python项目详细描述


Build Statuspypipythonlicense

夸脱速率限制器是Quart的扩展,允许速率限制为 按路线定义和执行。429错误响应 包括符合RFC7231Retry-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。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
目标c如何将“stringWithFormat”转换为Java?   如何在Android上添加Java库兼容性的持续集成检查?   java使用Jackson在Swagger中添加属性示例   scala中的javacogroup-two-RDD   java将用户输入的字符拆分为ArrayList   使用netbeans和命令提示符时未发现java类异常   regex如何在Java中获取除逗号和数字以外的字符?   已定义java wsimport<property>   java在对动态Google应用程序引擎后端的后续请求中重用对象   java在创建新对象时尝试向JNI对象的构造函数提供参数时出错   java如何同时检测方法post中的重复请求   使用model属性传递的java Spring MVC对象为空   java字符串可以用在三元条件语句中吗?   java哪里可以找到好的机器人代码教程?   java打印11000,具有来自同一类的两个线程(偶数和奇数)   发送文件列表时发生java Spring Rest异常   java在将AspectJ与iBatis、Spring一起使用时未应用任何事务