Valider un champ avec les expressions régulières dans Django
Publié le 17 novembre 2023
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
etAbstractUser
. - Avoir quelques notions sur les expressions régulières.
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.
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.