バリデータ (Validator)Link to this heading
バリデータを記述するLink to this heading
バリデータ (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__() メソッドを追加して マイグレーションフレームワークによりシリアライズ可能 になるようにしてください。
バリデータはどのように実行されるかLink to this heading
バリデータが実行される方法については、フォーム上での実行は フォームのバリデーション、モデル上の実行は オブジェクトを検証する にそれぞれ詳細が記載されています。モデルを save してもバリデータは自動的には呼び出されませんが、ModelForm を使用している場合にはフォームに含まれるすべてのフィールドでバリデータを実行することに注意してください。モデルのバリデーションがフォーム上でどのように動作するかについては、ModelForm ドキュメント を参照してください。
ビルトインのバリデータLink to this heading
django.core.validators モジュールは、モデルやフォームで使用する呼び出し可能なバリデータの集まりを有しています。これらは内部で使用されますが、作成したフィールドで使用することもできます。 追加で使うことも、field.clean() メソッドの代わりに使うことも可能です。
RegexValidatorLink to this heading
- class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)Link to this definition
- パラメータ:
RegexValidatorは、与えられたvalueを指定された正規表現でre.search()で検索します。デフォルトでは、一致が 見つからない 場合にmessageとcodeを持つValidationErrorを発生させます。inverse_matchをTrueに設定することで、動作を逆にできます。この場合、一致が 見つかった ときにValidationErrorが発生します。- regexLink to this definition
re.search()を使用して、指定されたvalue内を検索する正規表現パターンです。これは文字列かre.compile()で作成されたコンパイル済みの正規表現です。 デフォルトは空文字列で、すべてのvalueから検索されます。
- messageLink to this definition
バリデーションが失敗した場合に
ValidationErrorで使用されるエラーメッセージです。デフォルトは"Enter a valid value"です。
- codeLink to this definition
バリデーションが失敗した場合に
ValidationErrorで使用されるエラーコードです。デフォルトは"invalid"です。
- inverse_matchLink to this definition
regexに対する match モードです。デフォルトはFalseです。
EmailValidatorLink to this heading
- class EmailValidator(message=None, code=None, allowlist=None)Link to this definition
- パラメータ:
EmailValidatorは値がメールアドレスとして解釈可能であることを確認し、そうでない場合はmessageとcodeを持つValidationErrorを発生させます。320 文字以上の値は常に無効とみなされます。- messageLink to this definition
バリデーションに失敗した場合に
ValidationErrorが使用するエラーメッセージです。デフォルトは"Enter a valid email address"です。
- codeLink to this definition
バリデーションが失敗した場合に
ValidationErrorで使用されるエラーコードです。デフォルトは"invalid"です。
- allowlistLink to this definition
メールドメインの許可リスト。デフォルトでは、正規表現(
domain_regex属性)を使って@記号の後に現れる文字列を検証します。しかし、その文字列がallowlistに含まれている場合、この検証はバイパスされます。指定しない場合、デフォルトのallowlistは['localhost']です。ドットを含まない他のドメインはバリデーションを通過しないので、必要に応じてallowlistに追加する必要があります。
URLValidatorLink to this heading
- class URLValidator(schemes=None, regex=None, message=None, code=None)Link to this definition
RegexValidatorのサブクラスで、値が URL として解釈可能であることを確認し、そうでない場合は'invalid'というエラーコードを発生させます。max_length文字より長い値は常に無効とみなされます。ループバックアドレスと予約済み IP スペースは有効とみなされます。リテラル IPv6 アドレス (RFC 3986 Section 3.2.2) と Unicode ドメインの両方がサポートされています。
親クラスである
RegexValidatorのオプション引数に加え、URLValidatorはさらにオプション属性を受け付けます:- schemesLink to this definition
検証するURL/URIスキームのリスト。指定がない場合、デフォルトのリストは
['http', 'https', 'ftp', 'ftps']です。参考として、IANAのウェブサイトに valid URI schemes の完全なリストがあります。
- max_lengthLink to this definition
-
有効な値とみなされる最大長。デフォルトは2048文字です。
validate_emailLink to this heading
- validate_emailLink to this definition
カスタマイズされていない
EmailValidatorインスタンスです。
validate_slugLink to this heading
- validate_slugLink to this definition
値が文字、数字、アンダースコアまたはハイフンのみで構成されていることを確認する
RegexValidatorインスタンスです。
validate_unicode_slugLink to this heading
- validate_unicode_slugLink to this definition
値が Unicode 文字、数字、アンダースコア、またはハイフンのみで構成されていることを確認する
RegexValidatorインスタンスです。
validate_ipv4_addressLink to this heading
- validate_ipv4_addressLink to this definition
値がIPv4アドレスとして解釈可能であることを保証する
RegexValidatorインスタンスです。
validate_ipv6_addressLink to this heading
- validate_ipv6_addressLink to this definition
IPv6 アドレスの有効性をチェックするには
django.utils.ipv6を使います。
validate_ipv46_addressLink to this heading
- validate_ipv46_addressLink to this definition
validate_ipv4_addressとvalidate_ipv6_addressの両方を使用して、値が有効な IPv4 アドレスまたは IPv6 アドレスであることを確認します。
validate_comma_separated_integer_listLink to this heading
- validate_comma_separated_integer_listLink to this definition
値がカンマで区切られた整数のリストであることを確認する
RegexValidatorインスタンスです。
int_list_validatorLink to this heading
- int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)Link to this definition
文字列が
sepで区切られた整数で構成されていることを確認するRegexValidatorインスタンスを返します。これはallow_negativeがTrueの場合に負の整数を許容します。
MaxValueValidatorLink to this heading
- class MaxValueValidator(limit_value, message=None)Link to this definition
valueがlimit_valueよりも大きい場合、'max_value'のエラーコードを持つValidationErrorを発生させます。limit_valueには呼び出し可能オブジェクトを指定可能です。
MinValueValidatorLink to this heading
- class MinValueValidator(limit_value, message=None)Link to this definition
valueがlimit_valueよりも小さい場合、'min_value'のエラーコードを持つValidationErrorを発生させます。limit_valueには呼び出し可能オブジェクトを指定できます。
MaxLengthValidatorLink to this heading
- class MaxLengthValidator(limit_value, message=None)Link to this definition
valueがlimit_valueよりも長い場合、'max_length'のエラーコードを持つValidationErrorを発生させます。limit_valueには呼び出し可能オブジェクトを指定できます。
MinLengthValidatorLink to this heading
- class MinLengthValidator(limit_value, message=None)Link to this definition
valueがlimit_valueよりも短い場合、'min_length'のエラーコードを持つValidationErrorを発生させます。limit_valueには呼び出し可能オブジェクトを指定できます。
DecimalValidatorLink to this heading
- class DecimalValidator(max_digits, decimal_places)Link to this definition
以下のコードで
ValidationErrorを例外を発生させます:桁数が
max_digitsより大きい場合は'max_digits'。小数点以下の桁数が
decimal_placesより大きい場合は'max_decimal_places'。整数部の桁数が
max_digitsとdecimal_placesの差よりも大きい場合は、'max_whole_digits'。
FileExtensionValidatorLink to this heading
- class FileExtensionValidator(allowed_extensions, message, code)Link to this definition
value.name(valueはFile) の拡張子がallowed_extensionsで見つからなかった場合、ValidationErrorを'invalid_extension'のエラーコードで発生させます。拡張子は大文字小文字を区別せずにallowed_extensionsと比較されます。
validate_image_file_extensionLink to this heading
- validate_image_file_extensionLink to this definition
Pillow を使って
value.name(valueはFile) が 有効な画像拡張子 を持っていることを確認します。
ProhibitNullCharactersValidatorLink to this heading
- class ProhibitNullCharactersValidator(message=None, code=None)Link to this definition
str(value)に null 文字 ('˶x00') が一つ以上含まれる場合、ValidationErrorを発生させます。- messageLink to this definition
バリデーションに失敗した場合に
ValidationErrorが使用するエラーメッセージです。デフォルトは"Null characters are not allowed."です。
- codeLink to this definition
バリデーションに失敗した場合に
ValidationErrorが使用するエラーコードです。デフォルトは"null_characters_not_allowed"です。
StepValueValidatorLink to this heading
- class StepValueValidator(limit_value, message=None, offset=None)Link to this definition
値が
limit_valueの整数倍でない場合、ValidationErrorを'step_size'のコードで発生させます。offsetが設定されている場合は、limit_valueとoffsetを足した値に対してバリデーションが行われます。たとえば、StepValueValidator(3, offset=1.4)の場合、有効な値は1.4、4.4、7.4、10.4などです。