バリデータ (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)[ソース]¶
- パラメータ:
 - 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"です。
 
EmailValidator¶
- class EmailValidator(message=None, code=None, allowlist=None)[ソース]¶
- パラメータ:
 - EmailValidatorは値がメールアドレスとして解釈可能であることを確認し、そうでない場合は- messageと- codeを持つ- ValidationErrorを発生させます。320 文字以上の値は常に無効とみなされます。- 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_ipv46_address¶
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¶
ProhibitNullCharactersValidator¶
- class ProhibitNullCharactersValidator(message=None, code=None)[ソース]¶
- str(value)に null 文字 (- '˶x00') が一つ以上含まれる場合、- ValidationErrorを発生させます。- 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などです。Changed in Django 5.0:- offset引数が追加されました。
 
          