バリデータは、値を取って 特定の条件に合致しない場合に 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¶RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)[ソース]¶| パラメータ: |
|---|
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" です。
EmailValidator¶EmailValidator(message=None, code=None, allowlist=None)[ソース]¶| パラメータ: |
|---|
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.
バージョン 3.2 で非推奨: The whitelist parameter is deprecated. Use allowlist
instead.
The undocumented domain_whitelist attribute is deprecated. Use
domain_allowlist instead.
URLValidator¶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_ipv46_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¶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¶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¶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¶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¶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¶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¶ProhibitNullCharactersValidator(message=None, code=None)[ソース]¶Raises a ValidationError if str(value)
contains one or more nulls characters ('\x00').
| パラメータ: |
|---|
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".
8月 03, 2022