# Django 5.2.8 ドキュメント

# バリデータ (Validator)

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

バリデータ (validator) は呼び出し可能なオブジェクトで、値を受け取り、ある基準を満たしていない場合に `ValidationError` を発生させます。バリデータは異なるタイプのフィールド間でバリデーションロジックを再利用するのに便利です。

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

    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` が発生します。

  `RegexValidator` は、与えられた `value` を指定された正規表現で `re.search()` で検索します。デフォルトでは、一致が 見つからない 場合に `message` と `code` を持つ `ValidationError` を発生させます。`inverse_match` を `True` に設定することで、動作を逆にできます。この場合、一致が 見つかった ときに `ValidationError` が発生します。

  regex

    `re.search()` を使用して、指定された `value` 内を検索する正規表現パターンです。これは文字列か `re.compile()` で作成されたコンパイル済みの正規表現です。 デフォルトは空文字列で、すべての `value` から検索されます。

  message

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

  code

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

  inverse_match

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

  flags

    正規表現の文字列 `regex` とともにコンパイルに使われる regex フラグ です。`regex` にコンパイル済みの正規表現を指定した場合、`flags` をオーバーライドすると `TypeError` が発生します。デフォルトは `0` です。

### `EmailValidator`

class EmailValidator(message=None, code=None, allowlist=None)
  パラメータ:

    - message -- `None` 以外の場合、`message` をオーバーライドします。

    - code -- `None` 以外の場合、`code` をオーバーライドします。

    - allowlist -- `None` 以外の場合、`allowlist` をオーバーライドします。

  An `EmailValidator` ensures that a value looks like an email address, and raises a `ValidationError` with `message` and `code` if it doesn't. Values longer than 320 characters are always considered invalid.

  message

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

  code

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

  allowlist

    メールドメインの許可リスト。デフォルトでは、正規表現(`domain_regex` 属性)を使って `@` 記号の後に現れる文字列を検証します。しかし、その文字列が `allowlist` に含まれている場合、この検証はバイパスされます。指定しない場合、デフォルトの `allowlist` は `['localhost']` です。ドットを含まない他のドメインはバリデーションを通過しないので、必要に応じて `allowlist` に追加する必要があります。

### `DomainNameValidator`

class DomainNameValidator(accept_idna=True, message=None, code=None)

  `RegexValidator` のサブクラスで、値がドメイン名の形式になっているかを確認します。255文字を超える値は常に無効と見なされます。IPアドレスは有効なドメイン名としては受け付けられません。

  親クラスである `RegexValidator` クラスのオプション引数に加えて、 `DomainNameValidator` は以下の追加のオプション属性を受け付けます。

  accept_idna

    国際化ドメイン名、つまり非ASCII文字を含むドメイン名を受け入れるかどうかを決定します。デフォルトは `True` です。

### `URLValidator`

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

  `RegexValidator` のサブクラスで、値が URL として解釈可能であることを確認し、そうでない場合は `'invalid'` というエラーコードを発生させます。 `max_length` 文字より長い値は常に無効とみなされます。

  ループバックアドレスと予約済み IP スペースは有効とみなされます。リテラル IPv6 アドレス (RFC 3986 Section 3.2.2) と Unicode ドメインの両方がサポートされています。

  親クラスである `RegexValidator` のオプション引数に加え、 `URLValidator` はさらにオプション属性を受け付けます：

  schemes

    検証するURL/URIスキームのリスト。指定がない場合、デフォルトのリストは `['http', 'https', 'ftp', 'ftps']` です。参考として、IANAのウェブサイトに valid URI schemes の完全なリストがあります。

    警告

    `file:///` で始まる値は、 `file` スキームが指定されていてもバリデーションを通過しません。ホスト名を追加する必要があります。

  max_length

    有効な値とみなされる最大長。デフォルトは2048文字です。

### `validate_email`

validate_email

  カスタマイズされていない `EmailValidator` インスタンスです。

### `validate_domain_name`

validate_domain_name

  カスタマイズされていない `DomainNameValidator` インスタンス。

### `validate_slug`

validate_slug

  値が文字、数字、アンダースコアまたはハイフンのみで構成されていることを確認する `RegexValidator` インスタンスです。

### `validate_unicode_slug`

validate_unicode_slug

  値が Unicode 文字、数字、アンダースコア、またはハイフンのみで構成されていることを確認する `RegexValidator` インスタンスです。

### `validate_ipv4_address`

validate_ipv4_address

  値がIPv4アドレスとして解釈可能であることを保証する `RegexValidator` インスタンスです。

### `validate_ipv6_address`

validate_ipv6_address

  IPv6 アドレスの有効性をチェックするには `django.utils.ipv6` を使います。

### `validate_ipv46_address`

validate_ipv46_address

  `validate_ipv4_address` と `validate_ipv6_address` の両方を使用して、値が有効な IPv4 アドレスまたは IPv6 アドレスであることを確認します。

### `validate_comma_separated_integer_list`

validate_comma_separated_integer_list

  値がカンマで区切られた整数のリストであることを確認する `RegexValidator` インスタンスです。

### `int_list_validator`

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

  文字列が `sep` で区切られた整数で構成されていることを確認する `RegexValidator` インスタンスを返します。これは `allow_negative` が `True` の場合に負の整数を許容します。

### `MaxValueValidator`

class MaxValueValidator(limit_value, message=None)

  `value` が `limit_value` よりも大きい場合、`'max_value'` のエラーコードを持つ `ValidationError` を発生させます。`limit_value` には呼び出し可能オブジェクトを指定可能です。

### `MinValueValidator`

class MinValueValidator(limit_value, message=None)

  `value` が `limit_value` よりも小さい場合、`'min_value'` のエラーコードを持つ `ValidationError` を発生させます。`limit_value` には呼び出し可能オブジェクトを指定できます。

### `MaxLengthValidator`

class MaxLengthValidator(limit_value, message=None)

  `value` が `limit_value` よりも長い場合、`'max_length'` のエラーコードを持つ `ValidationError` を発生させます。`limit_value` には呼び出し可能オブジェクトを指定できます。

### `MinLengthValidator`

class MinLengthValidator(limit_value, message=None)

  `value` が `limit_value` よりも短い場合、`'min_length'` のエラーコードを持つ `ValidationError` を発生させます。`limit_value` には呼び出し可能オブジェクトを指定できます。

### `DecimalValidator`

class DecimalValidator(max_digits, decimal_places)

  以下のコードで `ValidationError` を例外を発生させます：

  - 桁数が `max_digits` より大きい場合は `'max_digits'` 。

  - 小数点以下の桁数が `decimal_places` より大きい場合は `'max_decimal_places'` 。

  - 整数部の桁数が `max_digits` と `decimal_places` の差よりも大きい場合は、`'max_whole_digits'` 。

### `FileExtensionValidator`

class FileExtensionValidator(allowed_extensions, message, code)

  `value.name` (`value` は `File`) の拡張子が `allowed_extensions` で見つからなかった場合、 `ValidationError` を `'invalid_extension'` のエラーコードで発生させます。拡張子は大文字小文字を区別せずに `allowed_extensions` と比較されます。

  警告

  ファイルの種類を決定するために、ファイル拡張子の検証に依存しないでください。ファイル名は、どんなデータを含んでいても、どんな拡張子にも変更できます。

### `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)

  `str(value)` に null 文字 (`'˶x00'`) が一つ以上含まれる場合、 `ValidationError` を発生させます。

  パラメータ:

    - message -- `None` 以外の場合、`message` をオーバーライドします。

    - code -- `None` 以外の場合、`code` をオーバーライドします。

  message

    バリデーションに失敗した場合に `ValidationError` が使用するエラーメッセージです。デフォルトは `"Null characters are not allowed."` です。

  code

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

### `StepValueValidator`

class StepValueValidator(limit_value, message=None, offset=None)

  値が `limit_value` の整数倍でない場合、 `ValidationError` を `'step_size'` のコードで発生させます。 `offset` が設定されている場合は、 `limit_value` と `offset` を足した値に対してバリデーションが行われます。たとえば、 `StepValueValidator(3, offset=1.4)` の場合、有効な値は `1.4`、`4.4`、`7.4`、`10.4` などです。