2023-08-27 04:29:16 +02:00
|
|
|
from fastapi import FastAPI
|
|
|
|
from fastapi.responses import PlainTextResponse
|
|
|
|
from fastapi.requests import Request
|
|
|
|
from fastapi.responses import Response
|
|
|
|
from slowapi import Limiter, _rate_limit_exceeded_handler
|
|
|
|
from slowapi.util import get_remote_address
|
|
|
|
from slowapi.errors import RateLimitExceeded
|
2023-06-23 11:20:25 +02:00
|
|
|
|
2023-08-27 04:29:16 +02:00
|
|
|
limiter = Limiter(key_func=lambda: "test", default_limits=["5/minute"])
|
|
|
|
app = FastAPI()
|
|
|
|
app.state.limiter = limiter
|
|
|
|
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
|
2023-06-23 11:20:25 +02:00
|
|
|
|
2023-08-27 04:29:16 +02:00
|
|
|
# Note: the route decorator must be above the limit decorator, not below it
|
|
|
|
@app.get("/home")
|
|
|
|
@limiter.limit("5/minute")
|
|
|
|
async def homepage(request: Request):
|
|
|
|
return PlainTextResponse("test")
|
|
|
|
|
|
|
|
@app.get("/mars")
|
|
|
|
@limiter.limit("5/minute")
|
|
|
|
async def homepage(request: Request, response: Response):
|
|
|
|
return {"key": "value"}
|