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

# Comment valider des données avec pydantic

> Apprenez à valider des données avec pydantic.

## Introduction

* Cet article vous guide dans la validation de données avec pydantic. Pydantic est une bibliothèque Python écrite en Rust.
* Avant de commencer, assurez-vous d'avoir Python et la bibliothèque Pydantic installés dans votre environnement. Consultez la commande d'installation de pydantic ci-dessous.

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

## Créer un modèle

* Tout d'abord, nous devons importer et faire hériter notre classe de `pydantic.BaseModel` pour commencer la validation. Dans notre exemple, nous allons créer une classe nommée
  `Person` qui aura un nom, un âge et un e-mail.

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

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

* Avec cette classe, lorsque nous l'instancions, pydantic vérifiera que les paramètres `name` et `email` sont des chaînes de caractères et que `age` est un entier.

### Utiliser le modèle

* Maintenant que nous l'avons créée, nous allons instancier la classe. Nous allons créer un dict contenant les données et le décompacter dans notre classe.

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

* L'exemple ci-dessus ne déclenchera aucune erreur puisque tous les **paramètres** sont du bon type. Nous allons maintenant fournir des données incorrectes pour confirmer que notre validation
  fonctionne.

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

* Dans l'exemple ci-dessus, l'erreur `ValidationError` sera déclenchée car `age` doit être un **entier** et ne peut pas être fourni sous forme de **chaîne de caractères**.

## Créer une dataclass

* Vous pouvez également créer des **dataclasses** avec pydantic, qui seront similaires aux **dataclasses** standard de Python mais bénéficieront de validations comme BaseModel.

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

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

* Si nous envoyons une `string` à `age`, elle sera convertie en `int`.

<Info>
  Pydantic prend en charge la validation récursive, ce qui signifie que lors de la validation de modèles imbriqués, il valide également les
  modèles internes.

  Si une classe possède une liste de `Person`, `people: list[Person]`, il vérifiera chaque élément de la liste et le convertira en `Person`.
</Info>

## Extras

* Pydantic propose quelques extras comme la validation des **e-mails** et un paquet de repli pour les **fuseaux horaires**. Pour les installer, vous devez exécuter les commandes suivantes :

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

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

* Vous pouvez installer les deux ensemble en exécutant la commande suivante.

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

* Pydantic\[email] apporte une classe pour gérer les e-mails, en les normalisant et en validant le format `user@domain.tld`. Pour cela, pydantic fournit la classe `EmailStr` afin d'effectuer cette validation.

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

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

## Avez-vous aimé cet article ?

* Nous avons créé ce contenu avec le plus grand soin afin d'offrir la meilleure aide possible.
  Si cet article vous a aidé d'une quelconque manière, soutenez notre travail ! Laissez votre avis ! Cela nous aide à comprendre ce qui compte le plus pour vous.

<CardGroup cols={2}>
  <Card title="Google Reviews" icon="google" href="https://g.page/r/CYZenpQcDgTzEAI/review">
    Laissez votre avis sur Google Reviews.
  </Card>

  <Card title="Trustpilot" icon="star" href="https://www.trustpilot.com/review/squarecloud.app">
    Laissez votre avis sur Trustpilot.
  </Card>
</CardGroup>
