バリデータ¶
バリデータを記述する¶
バリデータは、値を取って 特定の条件に合致しない場合に 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)[ソース]¶ パラメータ: A
RegexValidatorsearches the providedvaluefor a given regular expression withre.search(). By default, raises aValidationErrorwithmessageandcodeif a match is not found. Its behavior can be inverted by settinginverse_matchtoTrue, in which case theValidationErroris raised when a match is found.-
regex¶ The regular expression pattern to search for within the provided
value, usingre.search(). This may be a string or a pre-compiled regular expression created withre.compile(). Defaults to the empty string, which will be found in every possiblevalue.
-
message¶ バリデーションが失敗した場合に
ValidationErrorで使用されるエラーメッセージです。デフォルトは"Enter a valid value"です。
-
code¶ バリデーションが失敗した場合に
ValidationErrorで使用されるエラーコードです。デフォルトは"invalid"です。
-
EmailValidator¶
-
class
EmailValidator(message=None, code=None, allowlist=None)[ソース]¶ パラメータ: -
message¶ The error message used by
ValidationErrorif validation fails. Defaults to"Enter a valid email address".
-
code¶ バリデーションが失敗した場合に
ValidationErrorで使用されるエラーコードです。デフォルトは"invalid"です。
-
allowlist¶ Allowlist of email domains. By default, a regular expression (the
domain_regexattribute) is used to validate whatever appears after the@sign. However, if that string appears in theallowlist, this validation is bypassed. If not provided, the defaultallowlistis['localhost']. Other domains that don't contain a dot won't pass validation, so you'd need to add them to theallowlistas necessary.
バージョン 3.2 で非推奨: The
whitelistparameter is deprecated. Useallowlistinstead. The undocumenteddomain_whitelistattribute is deprecated. Usedomain_allowlistinstead.-
URLValidator¶
-
class
URLValidator(schemes=None, regex=None, message=None, code=None)[ソース]¶ A
RegexValidatorsubclass 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
RegexValidatorclass,URLValidatoraccepts 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
EmailValidatorinstance without any customizations.
validate_slug¶
-
validate_slug¶ A
RegexValidatorinstance that ensures a value consists of only letters, numbers, underscores or hyphens.
validate_unicode_slug¶
-
validate_unicode_slug¶ A
RegexValidatorinstance that ensures a value consists of only Unicode letters, numbers, underscores, or hyphens.
validate_ipv4_address¶
-
validate_ipv4_address[ソース]¶ A
RegexValidatorinstance that ensures a value looks like an IPv4 address.
validate_ipv6_address¶
validate_ipv46_address¶
validate_comma_separated_integer_list¶
-
validate_comma_separated_integer_list¶ A
RegexValidatorinstance 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
RegexValidatorinstance that ensures a string consists of integers separated bysep. It allows negative integers whenallow_negativeisTrue.
MaxValueValidator¶
-
class
MaxValueValidator(limit_value, message=None)[ソース]¶ Raises a
ValidationErrorwith a code of'max_value'ifvalueis greater thanlimit_value, which may be a callable.
MinValueValidator¶
-
class
MinValueValidator(limit_value, message=None)[ソース]¶ Raises a
ValidationErrorwith a code of'min_value'ifvalueis less thanlimit_value, which may be a callable.
MaxLengthValidator¶
-
class
MaxLengthValidator(limit_value, message=None)[ソース]¶ Raises a
ValidationErrorwith a code of'max_length'if the length ofvalueis greater thanlimit_value, which may be a callable.
MinLengthValidator¶
-
class
MinLengthValidator(limit_value, message=None)[ソース]¶ Raises a
ValidationErrorwith a code of'min_length'if the length ofvalueis less thanlimit_value, which may be a callable.
DecimalValidator¶
-
class
DecimalValidator(max_digits, decimal_places)[ソース]¶ Raises
ValidationErrorwith the following codes:'max_digits'if the number of digits is larger thanmax_digits.'max_decimal_places'if the number of decimals is larger thandecimal_places.'max_whole_digits'if the number of whole digits is larger than the difference betweenmax_digitsanddecimal_places.
FileExtensionValidator¶
-
class
FileExtensionValidator(allowed_extensions, message, code)[ソース]¶ Raises a
ValidationErrorwith a code of'invalid_extension'if the extension ofvalue.name(valueis aFile) isn't found inallowed_extensions. The extension is compared case-insensitively withallowed_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(valueis aFile) has a valid image extension.
ProhibitNullCharactersValidator¶
-
class
ProhibitNullCharactersValidator(message=None, code=None)[ソース]¶ Raises a
ValidationErrorifstr(value)contains one or more nulls characters ('\x00').パラメータ: -
message¶ The error message used by
ValidationErrorif validation fails. Defaults to"Null characters are not allowed.".
-
code¶ The error code used by
ValidationErrorif validation fails. Defaults to"null_characters_not_allowed".
-