Validateurs¶
Ăcriture de validateurs¶
Un validateur est un exécutable acceptant une valeur et générant ValidationError
si celle-ci ne rĂ©pond pas Ă certains critĂšres. Les validateurs peuvent ĂȘtre utiles pour rĂ©utiliser la logique de validation entre diffĂ©rents types de champs.
Par exemple, voici un validateur qui nâautorise que les nombres pairs :
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_('%(value)s is not an even number'),
params={'value': value},
)
Vous pouvez lâajouter Ă un champ de modĂšle via le paramĂštre validators
du champ :
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
Comme les valeurs sont converties en Python avant que les validateurs ne soient exĂ©cutĂ©s, vous pouvez mĂȘme utiliser les mĂȘmes validateurs avec les formulaires :
from django import forms
class MyForm(forms.Form):
even_field = forms.IntegerField(validators=[validate_even])
Vous pouvez aussi utiliser une classe avec une méthode __call__()
pour des validateurs plus complexes ou configurables. Par exemple, RegexValidator
utilise cette technique. Si un validateur basĂ© sur une classe est utilisĂ© dans lâoption de champ de modĂšle validators
, vĂ©rifiez quâil puisse ĂȘtre sĂ©rialisĂ© par le systĂšme des migrations en lui ajoutant les mĂ©thodes deconstruct() et __eq__()
.
Exécution des validateurs¶
Consultez la validation des formulaires pour plus dâinformations sur la maniĂšre dont les validateurs sont exĂ©cutĂ©s dans les formulaires, et validation dâobjets sur leur maniĂšre dâĂȘtre exĂ©cutĂ©s pour les modĂšles. Notez que les validateurs ne sont pas exĂ©cutĂ©s automatiquement lorsque vous enregistrez un modĂšle, mais si vous utilisez un formulaire ModelForm
, celui-ci applique les validateurs sur tous les champs inclus dans le formulaire. Consultez la documentation des ModelForm pour plus dâinformations sur la maniĂšre dont la validation des modĂšles interagit avec les formulaires.
Validateurs intégrés¶
Le module django.core.validators
contient une collection de validateurs exĂ©cutables Ă destination des champs de modĂšles et de formulaires. Ils sont utilisĂ©s en interne mais sont aussi Ă disposition pour vos propres champs. Ils peuvent ĂȘtre employĂ©s en plus ou Ă la place de mĂ©thodes field.clean()
personnalisées.
RegexValidator
¶
-
class
RegexValidator
(regex=None, message=None, code=None, inverse_match=None, flags=0)¶ ParamĂštres: - regex â Si diffĂ©rent de
None
, surchargeregex
. Cela peut ĂȘtre une chaĂźne dâexpression rĂ©guliĂšre ou une expression rĂ©guliĂšre prĂ©compilĂ©e. - message â Si diffĂ©rent de
None
, surchargemessage
. - code â Si diffĂ©rent de
None
, surchargecode
. - inverse_match â Si diffĂ©rent de
None
, surchargeinverse_match
. - flags â Si diffĂ©rent de
None
, surchargeflags
. Dans ce cas,regex
doit ĂȘtre une chaĂźne dâexpression rĂ©guliĂšre sous peine de gĂ©nĂ©rer une exceptionTypeError
.
Un validateur
RegexValidator
recherche dans la valeurvalue
fournie avec lâexpression rĂ©guliĂšre indiquĂ©e au moyen dere.search()
. Par défaut, génÚre une exceptionValidationError
avecmessage
etcode
quand aucune correspondance nâest trouvĂ©e. Son comportement peut ĂȘtre inversĂ© en dĂ©finissantinverse_match
ĂTrue
, auquel cas une erreurValidationError
est gĂ©nĂ©rĂ©e dans le cas oĂč une correspondance est trouvĂ©e.-
regex
¶ Le motif dâexpression rĂ©guliĂšre Ă utiliser pour chercher dans la valeur
value
fournie, utilisantre.search()
. Ce peut ĂȘtre une chaĂźne ou une expression rĂ©guliĂšre prĂ©compilĂ©e créée avecre.compile()
. Contient par dĂ©faut la chaĂźne vide qui sera trouvĂ©e dans nâimporte quelle valeur possible devalue
.
-
message
¶ Le message dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"Saisissez une valeur valide"
.
-
code
¶ Le code dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"invalid"
.
- regex â Si diffĂ©rent de
EmailValidator
¶
-
class
EmailValidator
(message=None, code=None, whitelist=None)¶ ParamÚtres: -
message
¶ Le message dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"Saisissez une adresse de courriel valide"
.
-
code
¶ Le code dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"invalid"
.
-
whitelist
¶ Liste blanche de domaines de messagerie Ă autoriser. Par dĂ©faut, une expression rĂ©guliĂšre (lâattribut
domain_regex
) est utilisĂ©e pour valider tout ce qui apparaĂźt aprĂšs le signe @. Cependant, si cette chaĂźne apparaĂźt dans la liste blanche, cette validation est ignorĂ©e. Si ce paramĂštre nâest pas indiquĂ©, sa valeur par dĂ©faut est['localhost']
. Dâautres domaines qui ne contiennent pas de point ne passeront pas la validation, il est donc nĂ©cessaire de les ajouter Ă la liste blanche sâils sont valides selon vous.
-
URLValidator
¶
-
class
URLValidator
(schemes=None, regex=None, message=None, code=None)¶ Une sous-classe de
RegexValidator
sâassurant quâune valeur rĂ©ponde aux critĂšres dâune URL, et gĂ©nĂ©rant un code dâerreur'invalid'
dans le cas contraire.Les adresses de type « loopback » (boucle locale) et les espaces IP réservés sont considérés comme valides. Les adresses IPv6 littérales (RFC 3986#section-3.2.2) et les domaines Unicode sont tous deux pris en charge.
En plus des paramĂštres facultatifs de sa classe parente
RegexValidator
,URLValidator
accepte un attribut facultatif supplémentaire :-
schemes
¶ Liste de protocoles URL/URI à valider. Lorsque ce paramÚtre est omis, la liste par défaut est
['http', 'https', 'ftp', 'ftps']
. Le site Web de la IANA fournit comme rĂ©fĂ©rence la liste complĂšte des protocoles dâURI valides.
-
validate_email
¶
-
validate_email
¶ Une instance
EmailValidator
sans aucune personnalisation.
validate_slug
¶
-
validate_slug
¶ Une instance de
RegexValidator
sâassurant quâune valeur ne soit composĂ©e que de lettres, de chiffres, de soulignements ou de tirets.
validate_unicode_slug
¶
-
validate_unicode_slug
¶ Une instance de
RegexValidator
sâassurant quâune valeur ne soit composĂ©e que de lettres Unicode, de chiffres, de soulignements ou de tirets.
validate_ipv4_address
¶
-
validate_ipv4_address
¶ Une instance de
RegexValidator
sâassurant quâune valeur rĂ©ponde aux critĂšres dâune adresse IPv4.
validate_ipv6_address
¶
-
validate_ipv6_address
¶ Utilise
django.utils.ipv6
pour vĂ©rifier la validitĂ© dâune adresse IPv6.
validate_ipv46_address
¶
-
validate_ipv46_address
¶ Utilise à la fois
validate_ipv4_address
etvalidate_ipv6_address
pour sâassurer quâune valeur soit une adresse IPv4 ou IPv6 valide.
validate_comma_separated_integer_list
¶
-
validate_comma_separated_integer_list
¶ Une instance de
RegexValidator
sâassurant quâune valeur contienne une liste de nombres entiers sĂ©parĂ©s par des virgules.
int_list_validator
¶
-
int_list_validator
(sep=', ', message=None, code='invalid', allow_negative=False)¶ Renvoie une instance de
RegexValidator
sâassurant quâune chaĂźne ne contienne que des nombres entiers sĂ©parĂ©s parsep
. Les entiers négatifs sont autorisés lorsqueallow_negative
vautTrue
.
MaxValueValidator
¶
-
class
MaxValueValidator
(limit_value, message=None)¶ GénÚre une exception
ValidationError
avec le code'max_value'
si la valeurvalue
est plus grande quelimit_value
, qui peut ĂȘtre exĂ©cutable.
MinValueValidator
¶
-
class
MinValueValidator
(limit_value, message=None)¶ GénÚre une exception
ValidationError
avec le code'min_value'
si la valeurvalue
est plus petite quelimit_value
, qui peut ĂȘtre exĂ©cutable.
MaxLengthValidator
¶
-
class
MaxLengthValidator
(limit_value, message=None)¶ GénÚre une exception
ValidationError
avec le code'max_length'
si la longueur de la valeurvalue
est plus grande quelimit_value
, qui peut ĂȘtre exĂ©cutable.
MinLengthValidator
¶
-
class
MinLengthValidator
(limit_value, message=None)¶ GénÚre une exception
ValidationError
avec le code'min_length'
si la longueur de la valeurvalue
est plus petite quelimit_value
, qui peut ĂȘtre exĂ©cutable.
DecimalValidator
¶
-
class
DecimalValidator
(max_digits, decimal_places)¶ GénÚre une exception
ValidationError
avec les codes suivants :'max_digits'
si le nombre de chiffres est plus grand quemax_digits
.'max_decimal_places'
si le nombre de chiffres aprĂšs la virgule est plus grand quedecimal_places
.'max_whole_digits'
si le nombre de chiffres de la partie entiÚre est plus grand que la différence entremax_digits
etdecimal_places
.
FileExtensionValidator
¶
-
class
FileExtensionValidator
(allowed_extensions, message, code)¶ GénÚre une exception
ValidationError
avec le code'invalid_extension'
si lâextension devalue.name
(value
étant un objetFile
) ne se trouve pas dansallowed_extensions
. La comparaison dâextension avecallowed_extensions
est insensible Ă la casse.Avertissement
Ne vous fiez pas Ă la validation de lâextension de fichier pour dĂ©terminer un type de fichier. Les fichiers peuvent ĂȘtre renommĂ©s avec nâimporte quelle extension quel que soit leur contenu.
validate_image_file_extension
¶
-
validate_image_file_extension
¶ Utilise Pillow pour sâassurer que
value.name
(value
étant un objetFile
) est une extension dâimage valide.
ProhibitNullCharactersValidator
¶
-
class
ProhibitNullCharactersValidator
(message=None, code=None)¶ GénÚre une exception
ValidationError
sistr(value)
contient un ou plusieurs caractĂšres nuls ('\x00'
).ParamĂštres: -
message
¶ Le message dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"Les caractÚres nuls ne sont pas autorisés"
.
-
code
¶ Le code dâerreur utilisĂ© par
ValidationError
si la validation échoue. La valeur par défaut est"null_characters_not_allowed"
.
-