Quiero usar slowapi en una aplicación python fastapi, para implementar RateLimiter. Sin embargo, las definiciones de los puntos finales utilizan un modelo de datos para los parámetros (que heredan de BaseModel) en lugar de una solicitud, como requiere la documentación de slowapi. Aquí hay un punto final de muestra del código:
@app.post("/process_user") def process_user( params: NewUser, pwd: str = Depends(authenticate), ):donde NewUser es el modelo de datos
class NewUser(BaseModel): ...¿Cómo puedo agregar un limitador de velocidad de slowapi con un cambio mínimo del diseño del código?
Gracias.
Debe pasar una solicitud de Starlette con su modelo Pydantic. Por ejemplo...
from fastapi import FastAPI from pydantic import BaseModel from slowapi import Limiter from slowapi.util import get_remote_address from starlette.requests import Request limiter = Limiter(key_func=get_remote_address) app = FastAPI() app.state.limiter = limiter class NewUser(BaseModel): ... @app.post("/process_user") @limiter.limit("1/second") def process_user( params: NewUser, pwd: str = Depends(authenticate), request: Request ):