バリデータは、値を取って 特定の条件に合致しない場合に 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"
.
2022年6月01日