未提供项目说明
asgi-ratelimit的Python项目详细描述
ASGI费率限制
限制用户访问频率。基于ASGI。在
100%覆盖。高性能。支持常规匹配。可定制的。在
安装
# Only install
pip install asgi-ratelimit
# Use redis
pip install asgi-ratelimit[redis]
# Use jwt
pip install asgi-ratelimit[jwt]
# Install all
pip install asgi-ratelimit[full]
使用
下面的示例将限制"default"
组下的用户每秒最多访问一次/second_limit
,每分钟最多访问一次/minute_limit
。并且"admin"
组中的用户没有限制。在
阻塞时间
当用户的请求频率触发上限时,接下来一段时间内的所有请求都将返回一个429
状态代码。在
示例:Rule(second=5, block_time=60)
,此规则将限制用户每秒最多访问5次。一旦超过此限制,接下来60秒内的所有请求都将返回429
。在
自定义块处理程序
只需指定on_blocked
,您就可以自定义在被阻止时调用的asgi应用程序。在
asyncdefyourself_429(scope:Scope,receive:Receive,send:Send)->None:awaitsend({"type":"http.response.start","status":429})awaitsend({"type":"http.response.body","body":b"429 page","more_body":False})RateLimitMiddleware(...,on_blocked=yourself_429)
内置身份验证函数
客户端IP
fromratelimit.auths.ipimportclient_ip
通过scope["client"]
或X-Real-IP
获取用户IP。在
Starlette会议
fromratelimit.auths.sessionimportfrom_session
从scope["session"]
获取user
和{
如果键group
不在会话中,将返回default
。如果键user
不在会话中,将引发一个EmptyInformation
。在
Json网络令牌
fromratelimit.auths.jwtimportcreate_jwt_authjwt_auth=create_jwt_auth("KEY","HS256")
从JWT获取user
和{Authorization
头中。在
- 项目
标签: