Skip to main content

Introducción

  • Este artículo te guía a través de la validación de datos con pydantic, una biblioteca de Python cuyo núcleo de validación (pydantic-core) está escrito en Rust. Los ejemplos usan pydantic v2.
  • Antes de empezar, asegúrate de tener Python y la biblioteca pydantic instalados en tu entorno. Consulta el comando de instalación de pydantic a continuación.

Creando un modelo

  • Primero, necesitaremos importar y hacer que nuestra clase herede de pydantic.BaseModel para empezar a validar. En nuestro ejemplo crearemos una clase llamada Person que tendrá un nombre, una edad y un correo electrónico.
  • Con esta clase, cuando la instanciemos, pydantic validará que name y email sean cadenas de texto y que age sea un entero.

Usando el modelo

  • Ahora que la tenemos creada, instanciaremos la clase. Crearemos un dict que contenga los datos y lo desempaquetaremos en nuestra clase.
  • El ejemplo anterior no generará ningún error ya que todos los campos son del tipo correcto. Por defecto, pydantic también convierte los valores compatibles: si age es la cadena "19", se convierte en el entero 19. Ahora enviaremos datos incorrectos para confirmar que nuestra validación funciona.
  • El ejemplo anterior genera un ValidationError porque age necesita ser un entero y "nineteen" no se puede convertir en uno:
  • Para manejar el error en lugar de dejar que detenga tu programa, captúralo con try/except. Su método errors() lista cada campo inválido:

Modo estricto

  • Si también quieres rechazar cadenas como "19", activa el modo estricto en el modelo. Así, age solo acepta un int real, y Person(name="John", age="19", email="john@example.com") genera ValidationError.

Creando una dataclass

  • También puedes crear dataclasses con pydantic. Son similares a las dataclasses estándar de Python, pero validan sus campos como BaseModel.
  • Si enviamos la cadena "19" a age, la convertirá al int 19.
Pydantic admite la validación recursiva, lo que significa que al validar modelos anidados, también valida los modelos internos.Si una clase tiene una lista de Person, people: list[Person], pydantic verifica cada elemento de la lista y lo convertirá en un Person.

Extras

  • Pydantic tiene algunos extras, como la validación de correo electrónico y un paquete de respaldo de timezone. Para instalarlos, ejecuta los siguientes comandos:
  • Puedes instalar ambos juntos ejecutando el siguiente comando.
  • pydantic[email] añade el tipo EmailStr, que valida el formato user@domain.tld y normaliza la dirección.

Validar variables de entorno al iniciar

  • Los bots y las APIs leen tokens y ajustes de variables de entorno. Con pydantic-settings, una variable que falta o no es válida detiene la aplicación al iniciar con un error claro, en lugar de fallar más tarde en medio de una solicitud.
  • Declara las variables que necesita tu aplicación en una clase que herede de BaseSettings. Cada campo lee la variable de entorno con el mismo nombre, sin distinguir mayúsculas: discord_token lee DISCORD_TOKEN.
settings.py
  • Si DISCORD_TOKEN no está definida, Settings() genera un ValidationError para discord_token con el mensaje Field required. Un valor como PORT=abc falla de la misma forma, porque port debe ser un entero.
  • SecretStr oculta el token cuando imprimes o registras los ajustes. Lee el valor real con settings.discord_token.get_secret_value().
  • En Square Cloud, define las variables en el dashboard o con squarecloud app env set, y lista pydantic-settings en tu requirements.txt. Consulta Variables de entorno.

Próximos pasos

Variables de entorno

Define las variables que lee tu clase de ajustes.

FastAPI

Haz deploy de una API que valida sus solicitudes con pydantic.

Bot de Discord

Aloja un bot que lee su token del entorno.

¿Te gustó este artículo?

  • Creamos este contenido con mucho cuidado para ofrecer la mejor ayuda posible. Si este artículo te ayudó de alguna manera, ¡apoya nuestro trabajo! Los desarrolladores ya calificaron a Square Cloud con 4.9/5 en 402 reseñas en Google y Trustpilot: ¡deja la tuya también! Nos ayuda a entender qué es lo que más te importa.

Google Reviews

Deja tu reseña en Google Reviews.

Trustpilot

Deja tu reseña en Trustpilot.