Présentation de Pydantic
Pydantic est la bibliothèque Python dominante pour la validation de données. Elle vérifie la conformité des types de données lors de leur transmissoin. Par exemple, si un entier est attendu mais qu'une chaîne est fournie, Pydantic génère une erreur pour garantir l'intégrité des informations.
Avantages principaux
- Typage statique : L'inférence de schémas via les annotations de type réduit la courbe d'apprentissage
- Performances : Noyau de validation écrit en Rust pour une exécution optimisée
- Interopérabilité : Génération automatique de schémas JSON pour l'intégration
- Flexibilité : Modes strict (validation pure) et laxiste (conversion auotmatique)
- Extensibilité : Validation personnalisable via des décorateurs dédiés
Choix de version
La version 2.x est recommandée pour les nouveuax projets depuis juin 2023, la v1.x n'étant plus maintenue depuis juin 2024.
Installation
pip install pydantic
Composants essentiels
BaseModel
Classe fondamentale pour définir des modèles de données avec validation intégrée :
from pydantic import BaseModel
class Produit(BaseModel):
reference: int
designation: str
prix: float
article = Produit(reference=101, designation="Clavier", prix=49.99)
print(article.designation) # Affiche: Clavier
try:
Produit(reference="ABC", designation="Souris", prix=25.0)
except ValueError as erreur:
print(erreur) # Erreur de validation
ConfigDict
Contrôle le comportement des modèles via des paramètres de configuration :
from pydantic import BaseModel, ConfigDict
class Client(BaseModel):
identifiant: int
nom: str
model_config = ConfigDict(extra="ignore") # Ignore les champs supplémentaires
utilisateur = Client(identifiant=1, nom="Luc", age=30) # Age ignoré silencieusement
Validateur personnalisé
Ajoute des règles de validation spécifiques avec le décorateur model_validator :
from pydantic import BaseModel, model_validator
class Commande(BaseModel):
id_commande: int
quantite: int
@model_validator(mode="before")
@classmethod
def verifier_quantite(cls, valeurs):
if valeurs["quantite"] <= 0:
raise ValueError("Quantité invalide")
return valeurs
try:
Commande(id_commande=1001, quantite=-5)
except ValueError as e:
print(e) # Quantité invalide