Modelos de Formulario¶
🌐 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.
Puedes usarmodelos de Pydantic para declararcampos de formulario en FastAPI.
Información
Para usar formularios, primero instalapython-multipart.
Asegúrate de crear unentorno virtual, activarlo, y luego instalarlo, por ejemplo:
$pipinstallpython-multipartNota
Esto es compatible desde la versión0.113.0 de FastAPI. 🤓
Modelos de Pydantic para Formularios¶
Solo necesitas declarar unmodelo de Pydantic con los campos que quieres recibir comocampos de formulario, y luego declarar el parámetro comoForm:
fromtypingimportAnnotatedfromfastapiimportFastAPI,FormfrompydanticimportBaseModelapp=FastAPI()classFormData(BaseModel):username:strpassword:str@app.post("/login/")asyncdeflogin(data:Annotated[FormData,Form()]):returndata🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromfastapiimportFastAPI,FormfrompydanticimportBaseModelapp=FastAPI()classFormData(BaseModel):username:strpassword:str@app.post("/login/")asyncdeflogin(data:FormData=Form()):returndataFastAPIextraerá los datos decada campo de losform data en el request y te dará el modelo de Pydantic que definiste.
Revisa la Documentación¶
Puedes verificarlo en la interfaz de documentación en/docs:

Prohibir Campos de Formulario Extra¶
En algunos casos de uso especiales (probablemente no muy comunes), podrías quererrestringir los campos de formulario a solo aquellos declarados en el modelo de Pydantic. Yprohibir cualquier campoextra.
Nota
Esto es compatible desde la versión0.114.0 de FastAPI. 🤓
Puedes usar la configuración del modelo de Pydantic paraforbid cualquier campoextra:
fromtypingimportAnnotatedfromfastapiimportFastAPI,FormfrompydanticimportBaseModelapp=FastAPI()classFormData(BaseModel):username:strpassword:strmodel_config={"extra":"forbid"}@app.post("/login/")asyncdeflogin(data:Annotated[FormData,Form()]):returndata🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromfastapiimportFastAPI,FormfrompydanticimportBaseModelapp=FastAPI()classFormData(BaseModel):username:strpassword:strmodel_config={"extra":"forbid"}@app.post("/login/")asyncdeflogin(data:FormData=Form()):returndataSi un cliente intenta enviar datos extra, recibirá un response deerror.
Por ejemplo, si el cliente intenta enviar los campos de formulario:
username:Rickpassword:Portal Gunextra:Mr. Poopybutthole
Recibirá un response de error indicando que el campoextra no está permitido:
{"detail":[{"type":"extra_forbidden","loc":["body","extra"],"msg":"Extra inputs are not permitted","input":"Mr. Poopybutthole"}]}Resumen¶
Puedes usar modelos de Pydantic para declarar campos de formulario en FastAPI. 😎







