我想用slotapi(无需redis缓存等)配置速率限制,但是我不想在每个端点中分别添加 @limiter.limit()装饰器。 所以我不想要的东西...

问题描述 投票:0回答:1

@limiter.limit("5/minute") async def myendpoint(request: Request) pass

因此,我想将其包括到中间件:

from slowapi import Limiter

limiter = Limiter(key_func=get_remote_address)

@app.middleware("http")
async def check_request(request: Request, call_next):
    client_ip = request.client.host
    prefix = "request_rate_limiter." + client_ip

    #... (logic from slowapi to get allowed flag)
    if allowed:
        response = await call_next(request)
    return response

但是我没有找到解决方案如何从限制器接收布尔值

我会从中继续进行操作吗?

如果我可以为不同的路线进行配置,并且取决于用户订阅(例如免费/premium),那就太好了。 thanks!

要对所有路线应用全局(默认)限制,您可以使用the(如下示例所示)来执行此操作。可以找到相关的文档。

SlowAPIMiddleware

fastapi middleware rate-limiting slowapi
1个回答
0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.