logo

echo 42

arrow-picto

Valider un champ avec les expressions régulières dans Django

Publié le 17 novembre 2023

  • Django
  • Python

Voici un exemple d'utilisation du validateur RegexValidator de Django pour renforcer la validation du champ 'username' au sein de la classe AbstractBaseUser. Cette démarche joue un rôle essentiel dans la garantie de la conformité des données utilisateur dans vos projets Django.

Prérequis

  • Connaissance de base de Django et de la création de modèles d'utilisateur personnalisé.
  • Familiarité avec les classes AbstractBaseUser et AbstractUser.
  • Avoir quelques notions sur les expressions régulières.
tips-picto

Lorsque vous utilisez la classe AbstractUser de Django, le champ 'username' est déjà inclus par défaut et possède une validation par regex intégrée. En revanche, avec la classe AbstractBaseUser, vous devez définir explicitement ce champ, offrant ainsi une personnalisation plus poussée si nécessaire.

Procédure

I. Intégrer le validateur dans le modèle

Dans notre modèle, nous souhaitons imposer des règles spécifiques aux noms d'utilisateur, comme la nécessité d'avoir au moins 3 caractères alphanumériques.

1) Importer la classe RegexValidator dans le fichier models.py :

from django.core.validators import RegexValidator

2) Création d'une instance de RegexValidator au sein de la classe AbstractBaseUser et ajout de l'attribut validators au champ username :

L'instance est configurée avec les paramètres suivants :

  • regex : Définit le motif d'expressions régulière que le 'username' doit respecter.
  • message : Spécifie le message d'erreur à afficher si la validation échoue.
alert-picto

La valeur de l'attribut validators doit être une liste. Sinon Django vous retournera l'erreur TypeError: 'RegexValidator' object is not iterable.

...
from django.core.validators import RegexValidator

...

class CustomUser(AbstractBaseUser):
    
    username_validator = RegexValidator(
        regex=r'^[0-9a-zA-Z]{3,}$',
        message="Nom d'utilisateur invalide"
    )

    username = models.CharField(
        max_length=30,
        validators=[username_validator],
        blank=False, 
        unique=True,
    )
...

Compréhension de l'expression régulière ^[0-9a-zA-Z]{3,}$ :

  • ^ : Début de la chaîne.
  • [0-9a-zA-Z] : Autorise les chiffres, lettres minuscules et majuscules.
  • {3,} : Exige un minimum de 3 caractères alphanumériques.
  • $ : Fin de la chaîne.

Conclusion

En incorporant RegexValidator dans votre modèle d'utilisateur Django, vous avez renforcé la validation du champ 'username'. Cette approche simple offre un contrôle précis sur le format des noms d'utilisateur, améliorant ainsi la qualité des données dans vos projets.

Liens externes