バリデータは、値を取って 特定の条件に合致しない場合に 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)[ソース]¶| パラメータ: |
|---|
regex¶提供された value を伴う検索用の正規表現パターン、もしくはコンパイル済みの正規表現です。デフォルトでは、match が見つからない場合に message と code を伴う ValidationError が発生します。この動作は inverse_match を True にセットすることで逆にできます。これにより、match が 見つかった 場合に ValidationError が発生するようになります。デフォルトでは、あらゆる文字列 (空白を含みます) と match します。
message¶バリデーションが失敗した場合に ValidationError で使用されるエラーメッセージです。デフォルトは "Enter a valid value" です。
code¶バリデーションが失敗した場合に ValidationError で使用されるエラーコードです。デフォルトは "invalid" です。
EmailValidator¶EmailValidator(message=None, code=None, whitelist=None)[ソース]¶| パラメータ: |
|---|
message¶The error message used by
ValidationError if validation fails.
Defaults to "Enter a valid email address".
code¶バリデーションが失敗した場合に ValidationError で使用されるエラーコードです。デフォルトは "invalid" です。
whitelist¶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.
URLValidator¶URLValidator(schemes=None, regex=None, message=None, code=None)[ソース]¶A RegexValidator 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.
limit_value can now 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.
limit_value can now 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.
limit_value can now 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.
limit_value can now 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, 2020