バリデータ

バリデータを記述する

バリデータは、値を取って 特定の条件に合致しない場合に 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)[ソース]
パラメータ:
  • regex -- None 以外の場合、regex をオーバーライドします。正規表現の文字列か、コンパイル済みの正規表現を指定します。
  • message -- None 以外の場合、message をオーバーライドします。
  • code -- None 以外の場合、code をオーバーライドします。
  • inverse_match -- None 以外の場合、inverse_match をオーバーライドする。
  • flags -- None 以外の場合、flags をオーバーライドします。指定する場合、regex は正規表現の文字列にする必要があります。それ以外の場合は TypeError が発生します。

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" です。

inverse_match

regex に対する match モードです。デフォルトは False です。

flags

The regex flags used when compiling the regular expression string regex. If regex is a pre-compiled regular expression, and flags is overridden, TypeError is raised. Defaults to 0.

EmailValidator

class EmailValidator(message=None, code=None, allowlist=None)[ソース]
パラメータ:
  • message -- None 以外の場合、message をオーバーライドします。
  • code -- None 以外の場合、code をオーバーライドします。
  • allowlist -- If not None, overrides allowlist.
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

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.

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_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 and validate_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 by sep. It allows negative integers when allow_negative is True.

MaxValueValidator

class 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

class 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

class 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

class 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

class 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

class 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

class ProhibitNullCharactersValidator(message=None, code=None)[ソース]

Raises a ValidationError if str(value) contains one or more nulls characters ('\x00').

パラメータ:
  • message -- None 以外の場合、message をオーバーライドします。
  • code -- None 以外の場合、code をオーバーライドします。
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".