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

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第三方库


热门话题
java如何使用URLhttp://localhost:8080/appcontext/METAINF/index.html?   Google应用程序引擎Java错误   java此GUI在设置BoxLayout后不显示任何内容   setParameter情况下的java临时类型(字符串名称、对象值)   Rijndael 256加密与Java&Bouncy Castle   java如何检查字符串是否为空?   java InvalidDataAccessResourceUsageException:无法提取结果集   AWTGLCanvas正在隐藏java JToggleButton工具提示   使用PDFBox的java格式数字   java Datainputstream和readUTF数据丢失   在java中使用axiomapi解码XJWT断言   为什么Java和PHP的相同代码不起作用?   JavaGoogleSigin错误,代码工作真实设备工作良好,但不工作模拟器获得错误ApiException 12500,谢谢,我也是新的   java通过使用JNA将void**参数作为char[]获取函数的结果   java如何使用泛型树集创建比较器?   未正确解析java简单文本文件   在java中将字符串转换为MyString对象类型   java Spring继承不起作用