Mira la lección en vídeo
Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.
Desbloquear Plan PlusCrear modelo Pydantic
Los modelos Pydantic son clases especiales que nos permiten definir la estructura y tipos de datos que esperamos recibir en nuestras API. Cuando FastAPI recibe una petición, utiliza estos modelos para validar automáticamente que los datos cumplan con los requisitos especificados.
Un modelo Pydantic se crea heredando de la clase BaseModel
que proporciona la librería. Esta clase base incluye toda la funcionalidad necesaria para la validación automática y conversión de tipos.
Definición básica de un modelo
Para crear nuestro primer modelo, necesitamos importar BaseModel
desde Pydantic y definir una clase que herede de ella:
from pydantic import BaseModel
class Usuario(BaseModel):
nombre: str
edad: int
activo: bool
En este ejemplo, hemos definido un modelo Usuario
con tres campos: nombre
de tipo string, edad
de tipo entero y activo
de tipo booleano. Pydantic utilizará estas anotaciones de tipo para validar automáticamente los datos entrantes.
Uso del modelo en FastAPI
Una vez definido el modelo, podemos utilizarlo en nuestras rutas de FastAPI. El framework se encarga automáticamente de la validación:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Usuario(BaseModel):
nombre: str
edad: int
activo: bool
@app.post("/usuarios/")
def crear_usuario(usuario: Usuario):
return {"mensaje": f"Usuario {usuario.nombre} creado correctamente"}
Cuando FastAPI recibe una petición POST en /usuarios/
, automáticamente:
- Valida que los datos recibidos coincidan con el modelo
Usuario
- Convierte los tipos de datos si es necesario
- Rechaza la petición si los datos no son válidos
Campos opcionales y valores por defecto
Podemos hacer que algunos campos sean opcionales o tengan valores por defecto utilizando la sintaxis estándar de Python:
from typing import Optional
from pydantic import BaseModel
class Producto(BaseModel):
nombre: str
precio: float
descripcion: Optional[str] = None
disponible: bool = True
En este modelo, descripcion
es opcional y puede ser None
, mientras que disponible
tiene un valor por defecto de True
. Si no se proporciona este campo en la petición, Pydantic asignará automáticamente el valor predeterminado.
Validación automática de tipos
Pydantic realiza conversiones inteligentes cuando es posible. Por ejemplo, si enviamos el string "25"
para un campo de tipo int
, Pydantic lo convertirá automáticamente al entero 25
:
class Configuracion(BaseModel):
puerto: int
debug: bool
nombre_app: str
# Estos datos JSON serían válidos:
# {
# "puerto": "8000", # Se convierte a int
# "debug": "true", # Se convierte a bool
# "nombre_app": "MiAPI"
# }
Si la conversión no es posible, Pydantic generará un error de validación que FastAPI devolverá automáticamente como una respuesta HTTP 422 con detalles específicos sobre qué campo causó el problema.
Modelos anidados
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
Los modelos Pydantic pueden contener otros modelos como campos, permitiendo crear estructuras de datos complejas:
class Direccion(BaseModel):
calle: str
ciudad: str
codigo_postal: str
class Cliente(BaseModel):
nombre: str
email: str
direccion: Direccion
En este caso, el campo direccion
del modelo Cliente
debe ser un objeto que cumpla con la estructura del modelo Direccion
. Pydantic validará tanto el modelo principal como los modelos anidados.
Acceso a los datos del modelo
Una vez que FastAPI ha validado los datos usando el modelo Pydantic, podemos acceder a los campos del modelo como atributos normales de Python:
@app.post("/clientes/")
def crear_cliente(cliente: Cliente):
# Acceso directo a los campos
nombre_cliente = cliente.nombre
ciudad_cliente = cliente.direccion.ciudad
return {
"cliente": nombre_cliente,
"ubicacion": ciudad_cliente,
"datos_completos": cliente.model_dump() # Convierte a diccionario
}
El método model_dump()
es especialmente útil cuando necesitamos convertir el modelo Pydantic de vuelta a un diccionario de Python para procesamiento adicional o almacenamiento.
Aprendizajes de esta lección de FastAPI
- Comprender qué son los modelos Pydantic y su función en la validación de datos.
- Aprender a definir modelos Pydantic básicos con campos y tipos de datos.
- Utilizar modelos Pydantic en rutas de FastAPI para validación automática.
- Manejar campos opcionales y valores por defecto en modelos.
- Implementar modelos anidados para estructuras de datos complejas.
Completa este curso de FastAPI y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs