バリデータLink to this heading

バリデータを記述するLink to this heading

バリデータは、値を取って 特定の条件に合致しない場合に ValidationError を返す呼び出し可能オブジェクトです。バリデータは、異なるタイプのフィールド間におけるバリデーションロジックを再利用したいときに役立ちます。

例えば、以下は偶数のみを許容するバリデータです:

Code
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 属性を通じて設定することができます:

Code
from django.db import models

class MyModel(models.Model):
    even_field = models.IntegerField(validators=[validate_even])

値はバリデータ実行前に Python に変換されているため、フォームでも同じバリデータを使用することができます:

Code
from django import forms

class MyForm(forms.Form):
    even_field = forms.IntegerField(validators=[validate_even])

より複雑なバリデータに対しては、クラスで __call__() メソッドを利用することもできます。RegexValidator はその一例で、このテクニックを使っています。クラスベースのバリデータが validators モデルフィールドのオプション内で使用されるときは、deconstruct()__eq__() メソッドを追加して 移行フレームワークによりシリアライズ可能 になるようにしてください。

バリデータはどのように実行されるかLink to this heading

バリデータが実行される方法については、フォーム上での実行は フォームのバリデーション、モデル上の実行は オブジェクトを検証する にそれぞれ詳細が記載されています。モデルを save してもバリデータは自動的には呼び出されませんが、ModelForm を使用している場合にはフォームに含まれるすべてのフィールドでバリデータを実行することに注意してください。モデルのバリデーションがフォーム上でどのように動作するかについては、ModelForm ドキュメント を参照してください。

ビルトインのバリデータLink to this heading

django.core.validators モジュールは、モデルやフォームで使用する呼び出し可能なバリデータの集まりを有しています。これらは内部で使用されますが、作成したフィールドで使用することもできます。 追加で使うことも、field.clean() メソッドの代わりに使うことも可能です。

RegexValidatorLink to this heading

class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)Link to this definition
パラメータ:
  • 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.

regexLink to this definition

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.

messageLink to this definition

バリデーションが失敗した場合に ValidationError で使用されるエラーメッセージです。デフォルトは "Enter a valid value" です。

codeLink to this definition

バリデーションが失敗した場合に ValidationError で使用されるエラーコードです。デフォルトは "invalid" です。

inverse_matchLink to this definition

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

flagsLink to this definition

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.

EmailValidatorLink to this heading

class EmailValidator(message=None, code=None, whitelist=None)Link to this definition
パラメータ:
  • message -- None 以外の場合、message をオーバーライドします。

  • code -- None 以外の場合、code をオーバーライドします。

  • whitelist -- If not None, overrides whitelist.

messageLink to this definition

The error message used by ValidationError if validation fails. Defaults to "Enter a valid email address".

codeLink to this definition

バリデーションが失敗した場合に ValidationError で使用されるエラーコードです。デフォルトは "invalid" です。

whitelistLink to this definition

Whitelist of email domains to allow. 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 whitelist, this validation is bypassed. If not provided, the default whitelist is ['localhost']. Other domains that don't contain a dot won't pass validation, so you'd need to whitelist them as necessary.

URLValidatorLink to this heading

class URLValidator(schemes=None, regex=None, message=None, code=None)Link to this definition

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:

schemesLink to this definition

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_emailLink to this heading

validate_emailLink to this definition

An EmailValidator instance without any customizations.

validate_slugLink to this heading

validate_slugLink to this definition

A RegexValidator instance that ensures a value consists of only letters, numbers, underscores or hyphens.

validate_unicode_slugLink to this heading

validate_unicode_slugLink to this definition

A RegexValidator instance that ensures a value consists of only Unicode letters, numbers, underscores, or hyphens.

validate_ipv4_addressLink to this heading

validate_ipv4_addressLink to this definition

A RegexValidator instance that ensures a value looks like an IPv4 address.

validate_ipv6_addressLink to this heading

validate_ipv6_addressLink to this definition

Uses django.utils.ipv6 to check the validity of an IPv6 address.

validate_ipv46_addressLink to this heading

validate_ipv46_addressLink to this definition

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_listLink to this heading

validate_comma_separated_integer_listLink to this definition

A RegexValidator instance that ensures a value is a comma-separated list of integers.

int_list_validatorLink to this heading

int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)Link to this definition

Returns a RegexValidator instance that ensures a string consists of integers separated by sep. It allows negative integers when allow_negative is True.

MaxValueValidatorLink to this heading

class MaxValueValidator(limit_value, message=None)Link to this definition

Raises a ValidationError with a code of 'max_value' if value is greater than limit_value, which may be a callable.

MinValueValidatorLink to this heading

class MinValueValidator(limit_value, message=None)Link to this definition

Raises a ValidationError with a code of 'min_value' if value is less than limit_value, which may be a callable.

MaxLengthValidatorLink to this heading

class MaxLengthValidator(limit_value, message=None)Link to this definition

Raises a ValidationError with a code of 'max_length' if the length of value is greater than limit_value, which may be a callable.

MinLengthValidatorLink to this heading

class MinLengthValidator(limit_value, message=None)Link to this definition

Raises a ValidationError with a code of 'min_length' if the length of value is less than limit_value, which may be a callable.

DecimalValidatorLink to this heading

class DecimalValidator(max_digits, decimal_places)Link to this definition

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.

FileExtensionValidatorLink to this heading

class FileExtensionValidator(allowed_extensions, message, code)Link to this definition

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.

validate_image_file_extensionLink to this heading

validate_image_file_extensionLink to this definition

Uses Pillow to ensure that value.name (value is a File) has a valid image extension.

ProhibitNullCharactersValidatorLink to this heading

class ProhibitNullCharactersValidator(message=None, code=None)Link to this definition

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

パラメータ:
  • message -- None 以外の場合、message をオーバーライドします。

  • code -- None 以外の場合、code をオーバーライドします。

messageLink to this definition

The error message used by ValidationError if validation fails. Defaults to "Null characters are not allowed.".

codeLink to this definition

The error code used by ValidationError if validation fails. Defaults to "null_characters_not_allowed".