# Django 4.1.8.dev20230308103347 ドキュメント

# バリデータ

## バリデータを記述する

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.

例えば、以下は偶数のみを許容するバリデータです:

    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},
            )

これはフィールドの `validators` 属性を通じて設定することができます:

    from django.db import models

    class MyModel(models.Model):
        even_field = models.IntegerField(validators=[validate_even])

値はバリデータ実行前に Python に変換されているため、フォームでも同じバリデータを使用することができます:

    from django import forms

    class MyForm(forms.Form):
        even_field = forms.IntegerField(validators=[validate_even])

より複雑なバリデータに対しては、クラスで `__call__()` メソッドを利用することもできます。`RegexValidator` はその一例で、このテクニックを使っています。クラスベースのバリデータが `validators` モデルフィールドのオプション内で使用されるときは、deconstruct() と `__eq__()` メソッドを追加して 移行フレームワークによりシリアライズ可能 になるようにしてください。

## バリデータはどのように実行されるか

バリデータが実行される方法については、フォーム上での実行は フォームのバリデーション、モデル上の実行は オブジェクトを検証する にそれぞれ詳細が記載されています。モデルを save してもバリデータは自動的には呼び出されませんが、`ModelForm` を使用している場合にはフォームに含まれるすべてのフィールドでバリデータを実行することに注意してください。モデルのバリデーションがフォーム上でどのように動作するかについては、ModelForm ドキュメント を参照してください。

## ビルトインのバリデータ

`django.core.validators` モジュールは、モデルやフォームで使用する呼び出し可能なバリデータの集まりを有しています。これらは内部で使用されますが、作成したフィールドで使用することもできます。 追加で使うことも、`field.clean()` メソッドの代わりに使うことも可能です。

### `RegexValidator`

class `RegexValidator`(regex=None, message=None, code=None, inverse_match=None, flags=0)

  パラメータ: | regex -- `None` 以外の場合、`regex` をオーバーライドします。正規表現の文字列か、コンパイル済みの正規表現を指定します。 message -- `None` 以外の場合、`message` をオーバーライドします。 code -- `None` 以外の場合、`code` をオーバーライドします。 inverse_match -- `None` 以外の場合、`inverse_match` をオーバーライドする。 flags -- `None` 以外の場合、`flags` をオーバーライドします。指定する場合、`regex` は正規表現の文字列にする必要があります。それ以外の場合は `TypeError` が発生します。

  A `RegexValidator` searches the provided `value` for a given regular expression with `re.search()`. By default, raises a `ValidationError` with `message` and `code` if a match is not found. Its behavior can be inverted by setting `inverse_match` to `True`, in which case the `ValidationError` is raised when a match is found.

  `regex`

    The regular expression pattern to search for within the provided `value`, using `re.search()`. This may be a string or a pre-compiled regular expression created with `re.compile()`. Defaults to the empty string, which will be found in every possible `value`.

  `message`

    バリデーションが失敗した場合に `ValidationError` で使用されるエラーメッセージです。デフォルトは `"Enter a valid value"` です。

  `code`

    バリデーションが失敗した場合に `ValidationError` で使用されるエラーコードです。デフォルトは `"invalid"` です。

  `inverse_match`

    `regex` に対する match モードです。デフォルトは `False` です。

  `flags`

    The regex flags used when compiling the regular expression string `regex`. If `regex` is a pre-compiled regular expression, and `flags` is overridden, `TypeError` is raised. Defaults to `0`.

### `EmailValidator`

class `EmailValidator`(message=None, code=None, allowlist=None)

  パラメータ: | message -- `None` 以外の場合、`message` をオーバーライドします。 code -- `None` 以外の場合、`code` をオーバーライドします。 allowlist -- If not `None`, overrides `allowlist`.

  `message`

    The error message used by `ValidationError` if validation fails. Defaults to `"Enter a valid email address"`.

  `code`

    バリデーションが失敗した場合に `ValidationError` で使用されるエラーコードです。デフォルトは `"invalid"` です。

  `allowlist`

    Allowlist of email domains. By default, a regular expression (the `domain_regex` attribute) is used to validate whatever appears after the `@` sign. However, if that string appears in the `allowlist`, this validation is bypassed. If not provided, the default `allowlist` is `['localhost']`. Other domains that don't contain a dot won't pass validation, so you'd need to add them to the `allowlist` as necessary.

### `URLValidator`

class `URLValidator`(schemes=None, regex=None, message=None, code=None)

  A `RegexValidator` subclass that ensures a value looks like a URL, and raises an error code of `'invalid'` if it doesn't.

  Loopback addresses and reserved IP spaces are considered valid. Literal IPv6 addresses (RFC 3986#section-3.2.2) and Unicode domains are both supported.

  In addition to the optional arguments of its parent `RegexValidator` class, `URLValidator` accepts an extra optional attribute:

  `schemes`

    URL/URI scheme list to validate against. If not provided, the default list is `['http', 'https', 'ftp', 'ftps']`. As a reference, the IANA website provides a full list of valid URI schemes.

### `validate_email`

`validate_email`

  An `EmailValidator` instance without any customizations.

### `validate_slug`

`validate_slug`

  A `RegexValidator` instance that ensures a value consists of only letters, numbers, underscores or hyphens.

### `validate_unicode_slug`

`validate_unicode_slug`

  A `RegexValidator` instance that ensures a value consists of only Unicode letters, numbers, underscores, or hyphens.

### `validate_ipv4_address`

`validate_ipv4_address`

  A `RegexValidator` instance that ensures a value looks like an IPv4 address.

### `validate_ipv6_address`

`validate_ipv6_address`

  Uses `django.utils.ipv6` to check the validity of an IPv6 address.

### `validate_ipv46_address`

`validate_ipv46_address`

  Uses both `validate_ipv4_address` and `validate_ipv6_address` to ensure a value is either a valid IPv4 or IPv6 address.

### `validate_comma_separated_integer_list`

`validate_comma_separated_integer_list`

  A `RegexValidator` instance that ensures a value is a comma-separated list of integers.

### `int_list_validator`

`int_list_validator`(sep=',', message=None, code='invalid', allow_negative=False)

  Returns a `RegexValidator` instance that ensures a string consists of integers separated by `sep`. It allows negative integers when `allow_negative` is `True`.

### `MaxValueValidator`

class `MaxValueValidator`(limit_value, message=None)

  Raises a `ValidationError` with a code of `'max_value'` if `value` is greater than `limit_value`, which may be a callable.

### `MinValueValidator`

class `MinValueValidator`(limit_value, message=None)

  Raises a `ValidationError` with a code of `'min_value'` if `value` is less than `limit_value`, which may be a callable.

### `MaxLengthValidator`

class `MaxLengthValidator`(limit_value, message=None)

  Raises a `ValidationError` with a code of `'max_length'` if the length of `value` is greater than `limit_value`, which may be a callable.

### `MinLengthValidator`

class `MinLengthValidator`(limit_value, message=None)

  Raises a `ValidationError` with a code of `'min_length'` if the length of `value` is less than `limit_value`, which may be a callable.

### `DecimalValidator`

class `DecimalValidator`(max_digits, decimal_places)

  Raises `ValidationError` with the following codes:

  - `'max_digits'` if the number of digits is larger than `max_digits`.
  - `'max_decimal_places'` if the number of decimals is larger than `decimal_places`.
  - `'max_whole_digits'` if the number of whole digits is larger than the difference between `max_digits` and `decimal_places`.

### `FileExtensionValidator`

class `FileExtensionValidator`(allowed_extensions, message, code)

  Raises a `ValidationError` with a code of `'invalid_extension'` if the extension of `value.name` (`value` is a `File`) isn't found in `allowed_extensions`. The extension is compared case-insensitively with `allowed_extensions`.

  警告

  Don't rely on validation of the file extension to determine a file's type. Files can be renamed to have any extension no matter what data they contain.

### `validate_image_file_extension`

`validate_image_file_extension`

  Uses Pillow to ensure that `value.name` (`value` is a `File`) has a valid image extension.

### `ProhibitNullCharactersValidator`

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

  Raises a `ValidationError` if `str(value)` contains one or more null characters (`'\x00'`).

  パラメータ: | message -- `None` 以外の場合、`message` をオーバーライドします。 code -- `None` 以外の場合、`code` をオーバーライドします。

  `message`

    The error message used by `ValidationError` if validation fails. Defaults to `"Null characters are not allowed."`.

  `code`

    The error code used by `ValidationError` if validation fails. Defaults to `"null_characters_not_allowed"`.

### `StepValueValidator`

New in Django 4.1.

class `StepValueValidator`(limit_value, message=None)

  Raises a `ValidationError` with a code of `'step_size'` if `value` is not an integral multiple of `limit_value`, which can be a float, integer or decimal value or a callable.