---
title: "Validateurs"
version: 2.2
locale: fr
source: https://docs.djangoproject.com/fr/2.2/ref/validators/
canonical: https://djangodocs.dev/fr/2.2/ref/validators/
---
# Validateurs

## Écriture de validateurs

Un validateur est un exécutable acceptant une valeur et générant [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.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`](/fr/2.2/ref/models/fields/#django.db.models.Field.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`](#django.core.validators.RegexValidator) utilise cette technique. Si un validateur basé sur une classe est utilisé dans l’option de champ de modèle [`validators`](/fr/2.2/ref/models/fields/#django.db.models.Field.validators), vérifiez qu’il puisse être [sérialisé par le système des migrations](/fr/2.2/topics/migrations/#migration-serializing) en lui ajoutant les méthodes [deconstruct()](/fr/2.2/topics/migrations/#custom-deconstruct-method) et `__eq__()`.

## Exécution des validateurs

Consultez la [validation des formulaires](/fr/2.2/ref/forms/validation/) pour plus d’informations sur la manière dont les validateurs sont exécutés dans les formulaires, et [validation d’objets](/fr/2.2/ref/models/instances/#validating-objects) 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`](/fr/2.2/topics/forms/modelforms/#django.forms.ModelForm), celui-ci applique les validateurs sur tous les champs inclus dans le formulaire. Consultez la [documentation des ModelForm](/fr/2.2/topics/forms/modelforms/) 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`](#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`, surcharge [`regex`](#django.core.validators.RegexValidator.regex). 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`, surcharge [`message`](#django.core.validators.RegexValidator.message).
- `code` – Si différent de `None`, surcharge [`code`](#django.core.validators.RegexValidator.code).
- `inverse_match` – Si différent de `None`, surcharge [`inverse_match`](#django.core.validators.RegexValidator.inverse_match).
- `flags` – Si différent de `None`, surcharge [`flags`](#django.core.validators.RegexValidator.flags). Dans ce cas, [`regex`](#django.core.validators.RegexValidator.regex) doit être une chaîne d’expression régulière sous peine de générer une exception [`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError).

#### `regex`

Le motif d’expression régulière à rechercher dans la valeur `value` fournie, ou une expression régulière précompilée. Par défaut, génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec [`message`](#django.core.validators.RegexValidator.message) et [`code`](#django.core.validators.RegexValidator.code) quand aucune correspondance n’est trouvée. Ce comportement standard peut être inversé en définissant [`inverse_match`](#django.core.validators.RegexValidator.inverse_match) à `True`, auquel cas une erreur [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) est générée dans le cas où une correspondance **est** trouvée. Par défaut, correspond à n’importe quelle chaîne (y compris une chaîne vide).

#### `message`

Le message d’erreur utilisé par [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) si la validation échoue. La valeur par défaut est `"Saisissez une valeur valide"`.

#### `code`

Le code d’erreur utilisé par [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) si la validation échoue. La valeur par défaut est `"invalid"`.

#### `inverse_match`

Le mode de correspondance pour [`regex`](#django.core.validators.RegexValidator.regex). Sa valeur par défaut est `False`.

#### `flags`

Les drapeaux utilisés lors de la compilation de la chaîne d’expression régulière [`regex`](#django.core.validators.RegexValidator.regex). Si [`regex`](#django.core.validators.RegexValidator.regex) est une expression régulière précompilée et que [`flags`](#django.core.validators.RegexValidator.flags) est défini, une exception [`TypeError`](https://docs.python.org/3/library/exceptions.html#TypeError) est générée. La valeur par défaut est `0`.

### `EmailValidator`

#### `class EmailValidator(message=None, code=None, whitelist=None)`

**Paramètres:** - `message` – Si différent de `None`, surcharge [`message`](#django.core.validators.EmailValidator.message).
- `code` – Si différent de `None`, surcharge [`code`](#django.core.validators.EmailValidator.code).
- `whitelist` – Si différent de `None`, surcharge [`whitelist`](#django.core.validators.EmailValidator.whitelist).

#### `message`

Le message d’erreur utilisé par [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.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`](/fr/2.2/ref/exceptions/#django.core.exceptions.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)`

Un [`RegexValidator`](#django.core.validators.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**](https://datatracker.ietf.org/doc/html/rfc3986.html#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`](#django.core.validators.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](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml).

### `validate_email`

#### `validate_email`

Une instance [`EmailValidator`](#django.core.validators.EmailValidator) sans aucune personnalisation.

### `validate_slug`

#### `validate_slug`

Une instance de [`RegexValidator`](#django.core.validators.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`](#django.core.validators.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`](#django.core.validators.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` et `validate_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`](#django.core.validators.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`](#django.core.validators.RegexValidator) s’assurant qu’une chaîne ne contienne que des nombres entiers séparés par `sep`. Les entiers négatifs sont autorisés lorsque `allow_negative` vaut `True`.

### `MaxValueValidator`

#### `class MaxValueValidator(limit_value, message=None)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec le code `'max_value'` si la valeur `value` est plus grande que `limit_value`, qui peut être exécutable.

> **Changed in Django 2.2**
>
> `limit_value` peut dorénavant être exécutable.

### `MinValueValidator`

#### `class MinValueValidator(limit_value, message=None)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec le code `'min_value'` si la valeur `value` est plus petite que `limit_value`, qui peut être exécutable.

> **Changed in Django 2.2**
>
> `limit_value` peut dorénavant être exécutable.

### `MaxLengthValidator`

#### `class MaxLengthValidator(limit_value, message=None)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec le code `'max_length'` si la longueur de la valeur `value` est plus grande que `limit_value`, qui peut être exécutable.

> **Changed in Django 2.2**
>
> `limit_value` peut dorénavant être exécutable.

### `MinLengthValidator`

#### `class MinLengthValidator(limit_value, message=None)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec le code `'min_length'` si la longueur de la valeur `value` est plus petite que `limit_value`, qui peut être exécutable.

> **Changed in Django 2.2**
>
> `limit_value` peut dorénavant être exécutable.

### `DecimalValidator`

#### `class DecimalValidator(max_digits, decimal_places)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec les codes suivants :

- `'max_digits'` si le nombre de chiffres est plus grand que `max_digits`.
- `'max_decimal_places'` si le nombre de chiffres après la virgule est plus grand que `decimal_places`.
- `'max_whole_digits'` si le nombre de chiffres de la partie entière est plus grand que la différence entre `max_digits` et `decimal_places`.

### `FileExtensionValidator`

#### `class FileExtensionValidator(allowed_extensions, message, code)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) avec le code `'invalid_extension'` si l’extension de `value.name` (`value` étant un objet [`File`](/fr/2.2/ref/files/file/#django.core.files.File)) ne se trouve pas dans `allowed_extensions`. La comparaison d’extension avec `allowed_extensions` est insensible à la casse.

> **Warning**
>
> 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 objet [`File`](/fr/2.2/ref/files/file/#django.core.files.File)) est une [extension d’image valide](https://pillow.readthedocs.io/en/latest/handbook/image-file-formats.html).

### `ProhibitNullCharactersValidator`

#### `class ProhibitNullCharactersValidator(message=None, code=None)`

Génère une exception [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) si `str(value)` contient un ou plusieurs caractères nuls (`'\x00'`).

**Paramètres:** - `message` – Si différent de `None`, surcharge [`message`](#django.core.validators.ProhibitNullCharactersValidator.message).
- `code` – Si différent de `None`, surcharge [`code`](#django.core.validators.ProhibitNullCharactersValidator.code).

#### `message`

Le message d’erreur utilisé par [`ValidationError`](/fr/2.2/ref/exceptions/#django.core.exceptions.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`](/fr/2.2/ref/exceptions/#django.core.exceptions.ValidationError) si la validation échoue. La valeur par défaut est `"null_characters_not_allowed"`.
