Modelos de Parámetros Query¶
🌐 Traducción por IA y humanos
Esta traducción fue hecha por IA guiada por humanos. 🤝
Podría tener errores al interpretar el significado original, o sonar poco natural, etc. 🤖
Puedes mejorar esta traducciónayudándonos a guiar mejor al LLM de IA.
Si tienes un grupo deparámetros query que están relacionados, puedes crear unmodelo de Pydantic para declararlos.
Esto te permitiríareutilizar el modelo enmúltiples lugares y también declarar validaciones y metadatos para todos los parámetros de una vez. 😎
Nota
Esto es compatible desde la versión0.115.0 de FastAPI. 🤓
Parámetros Query con un Modelo Pydantic¶
Declara losparámetros query que necesitas en unmodelo de Pydantic, y luego declara el parámetro comoQuery:
fromtypingimportAnnotated,LiteralfromfastapiimportFastAPI,QueryfrompydanticimportBaseModel,Fieldapp=FastAPI()classFilterParams(BaseModel):limit:int=Field(100,gt=0,le=100)offset:int=Field(0,ge=0)order_by:Literal["created_at","updated_at"]="created_at"tags:list[str]=[]@app.get("/items/")asyncdefread_items(filter_query:Annotated[FilterParams,Query()]):returnfilter_query🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromtypingimportLiteralfromfastapiimportFastAPI,QueryfrompydanticimportBaseModel,Fieldapp=FastAPI()classFilterParams(BaseModel):limit:int=Field(100,gt=0,le=100)offset:int=Field(0,ge=0)order_by:Literal["created_at","updated_at"]="created_at"tags:list[str]=[]@app.get("/items/")asyncdefread_items(filter_query:FilterParams=Query()):returnfilter_queryFastAPIextraerá los datos paracada campo de losparámetros query en el request y te proporcionará el modelo de Pydantic que definiste.
Revisa la Documentación¶
Puedes ver los parámetros query en la UI de documentación en/docs:

Prohibir Parámetros Query Extras¶
En algunos casos de uso especiales (probablemente no muy comunes), podrías quererrestringir los parámetros query que deseas recibir.
Puedes usar la configuración del modelo de Pydantic paraforbid cualquier campoextra:
fromtypingimportAnnotated,LiteralfromfastapiimportFastAPI,QueryfrompydanticimportBaseModel,Fieldapp=FastAPI()classFilterParams(BaseModel):model_config={"extra":"forbid"}limit:int=Field(100,gt=0,le=100)offset:int=Field(0,ge=0)order_by:Literal["created_at","updated_at"]="created_at"tags:list[str]=[]@app.get("/items/")asyncdefread_items(filter_query:Annotated[FilterParams,Query()]):returnfilter_query🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromtypingimportLiteralfromfastapiimportFastAPI,QueryfrompydanticimportBaseModel,Fieldapp=FastAPI()classFilterParams(BaseModel):model_config={"extra":"forbid"}limit:int=Field(100,gt=0,le=100)offset:int=Field(0,ge=0)order_by:Literal["created_at","updated_at"]="created_at"tags:list[str]=[]@app.get("/items/")asyncdefread_items(filter_query:FilterParams=Query()):returnfilter_querySi un cliente intenta enviar algunos datosextra en losparámetros query, recibirán un response deerror.
Por ejemplo, si el cliente intenta enviar un parámetro querytool con un valor deplumbus, como:
https://example.com/items/?limit=10&tool=plumbusRecibirán un response deerror que les indica que el parámetro querytool no está permitido:
{"detail":[{"type":"extra_forbidden","loc":["query","tool"],"msg":"Extra inputs are not permitted","input":"plumbus"}]}Resumen¶
Puedes usarmodelos de Pydantic para declararparámetros query enFastAPI. 😎
Consejo
Alerta de spoiler: también puedes usar modelos de Pydantic para declarar cookies y headers, pero leerás sobre eso más adelante en el tutorial. 🤫







