バリデータ¶
バリデータを記述する¶
A validator is a callable that takes a value and raises a
ValidationError
if it doesn't meet some
criteria. Validators can be useful for reusing validation logic between
different types of fields.
例えば、以下は偶数のみを許容するバリデータです:
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
RegexValidator
searches the providedvalue
for a given regular expression withre.search()
. By default, raises aValidationError
withmessage
andcode
if a match is not found. Its behavior can be inverted by settinginverse_match
toTrue
, in which case theValidationError
is 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)¶ パラメータ: An
EmailValidator
ensures that a value looks like an email, and raises aValidationError
withmessage
andcode
if it doesn't. Values longer than 320 characters are always considered invalid.-
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 theallowlist
, this validation is bypassed. If not provided, the defaultallowlist
is['localhost']
. Other domains that don't contain a dot won't pass validation, so you'd need to add them to theallowlist
as necessary.
Changed in Django 3.2.20:In older versions, values longer than 320 characters could be considered valid.
-
URLValidator
¶
-
class
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. Values longer thanmax_length
characters are always considered invalid.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.
-
max_length
¶ - New in Django 3.2.20.
The maximum length of values that could be considered valid. Defaults to 2048 characters.
Changed in Django 3.2.20:In older versions, values longer than 2048 characters could be considered valid.
-
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_ipv6_address
¶ Uses
django.utils.ipv6
to check the validity of an IPv6 address.
validate_ipv46_address
¶
-
validate_ipv46_address
¶ Uses both
validate_ipv4_address
andvalidate_ipv6_address
to ensure a value is either a valid IPv4 or IPv6 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 bysep
. It allows negative integers whenallow_negative
isTrue
.
MaxValueValidator
¶
-
class
MaxValueValidator
(limit_value, message=None)¶ Raises a
ValidationError
with a code of'max_value'
ifvalue
is greater thanlimit_value
, which may be a callable.
MinValueValidator
¶
-
class
MinValueValidator
(limit_value, message=None)¶ Raises a
ValidationError
with a code of'min_value'
ifvalue
is less thanlimit_value
, which may be a callable.
MaxLengthValidator
¶
-
class
MaxLengthValidator
(limit_value, message=None)¶ Raises a
ValidationError
with a code of'max_length'
if the length ofvalue
is greater thanlimit_value
, which may be a callable.
MinLengthValidator
¶
-
class
MinLengthValidator
(limit_value, message=None)¶ Raises a
ValidationError
with a code of'min_length'
if the length ofvalue
is less thanlimit_value
, which may be a callable.
DecimalValidator
¶
-
class
DecimalValidator
(max_digits, decimal_places)¶ Raises
ValidationError
with 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_digits
anddecimal_places
.
FileExtensionValidator
¶
-
class
FileExtensionValidator
(allowed_extensions, message, code)¶ Raises a
ValidationError
with a code of'invalid_extension'
if the extension ofvalue.name
(value
is 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
(value
is aFile
) has a valid image extension.
ProhibitNullCharactersValidator
¶
-
class
ProhibitNullCharactersValidator
(message=None, code=None)¶ Raises a
ValidationError
ifstr(value)
contains one or more null 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"
.
-
StepValueValidator
¶
-
class
StepValueValidator
(limit_value, message=None)¶ Raises a
ValidationError
with a code of'step_size'
ifvalue
is not an integral multiple oflimit_value
, which can be a float, integer or decimal value or a callable.