> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo validar datos con pydantic

> Aprende a validar datos con pydantic.

## Introducción

* Este artículo te guía a través de la validación de datos con pydantic. Pydantic es una biblioteca de Python construida en Rust.
* 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.

```bash theme={null}
pip install pydantic
```

## 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.

```python theme={null}
from pydantic import BaseModel

class Person(BaseModel):
    name: str
    age: int
    email: str
```

* Con esta clase, cuando la instanciemos, pydantic validará si los parámetros `name` y `email` son cadenas de texto y si `age` es 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.

```python theme={null}
data = {
    "name": "John",
    "age": 19,
    "email": "john@gmail.com"
}
person = Person(**data)
```

* El ejemplo anterior no generará ningún error ya que todos los **parámetros** son del tipo correcto. Ahora crearemos un dato incorrecto para confirmar si nuestra validación
  funciona.

```python theme={null}
data = {
    "name": "John",
    "age": "19",
    "email": "john@gmail.com"
}
person = Person(**data)
```

* En el ejemplo anterior se generará el error `ValidationError` porque `age` necesita ser un **entero** y no puede proporcionarse como una **cadena de texto**.

## Creando una dataclass

* También puedes crear **dataclasses** con pydantic, que serán similares a las **dataclasses** estándar de Python pero tendrán validaciones como BaseModel.

```python theme={null}
from pydantic import dataclass

@dataclass
class Person:
    name: str
    age: int
    email: str
```

* Si enviamos una `string` a `age`, la convertirá a `int`.

<Info>
  Pydantic admite la validación recursiva, lo que significa que al validar modelos anidados, también valida los modelos
  internos.

  Si alguna clase tiene una lista de `Person`, `people: list[Person]`, verificará cada elemento de la lista y lo convertirá en un `Person`.
</Info>

## Extras

* Pydantic tiene algunos extras como validaciones de **correo electrónico** y un paquete de respaldo de **timezone**. Para instalarlos, necesitas ejecutar los siguientes comandos:

```bash theme={null}
pip install pydantic[email]
```

```bash theme={null}
pip install pydantic[timezone]
```

* Puedes instalar ambos juntos ejecutando el siguiente comando.

```bash theme={null}
pip install pydantic[email,timezone]
```

* Pydantic\[email] trae una clase para manejar correos electrónicos, normalizándolos y validando el formato `user@domain.tld`. Para esto, pydantic trae la clase `EmailStr` para realizar esta validación.

```python theme={null}
from pydantic import dataclass, EmailStr

@dataclass
class Person:
    name: str
    age: int
    email: EmailStr
```

## ¿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! ¡Deja tu reseña! nos ayuda a entender qué es lo que más te importa.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Deja tu reseña en Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Deja tu reseña en Trustpilot.
  </Card>
</CardGroup>
