Validateurs¶
Écriture de validateurs¶
A validator is a callable that takes a value and raises a
ValidationError
if it doesn’t meet some
criteria. Validators can be useful for reusing validation logic between
different types of fields.
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)[source]¶ 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, allowlist=None)[source]¶ 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"
.
-
allowlist
¶ Liste autorisée de domaines de messagerie. 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 listeallowlist
, 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 autoriséeallowlist
s’ils sont valides selon vous.
-
URLValidator
¶
-
class
URLValidator
(schemes=None, regex=None, message=None, code=None)[source]¶ 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
[source]¶ Une instance de
RegexValidator
s’assurant qu’une valeur réponde aux critères d’une adresse IPv4.
validate_ipv6_address
¶
validate_ipv46_address
¶
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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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)[source]¶ 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
[source]¶ 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)[source]¶ Raises a
ValidationError
ifstr(value)
contains one or more null characters ('\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"
.
-
StepValueValidator
¶
-
class
StepValueValidator
(limit_value, message=None)[source]¶ Raises a
ValidationError
with a code of'step_size'
ifvalue
is not an integral multiple oflimit_value
, which can be a float, integer or decimal value or a callable.