バリデーター—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/validators
移動先:案内検索

バリデーター

バリデーターの作成

バリデーターは、値を取り、いくつかの基準を満たさない場合に 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__()メソッド。


バリデーターの実行方法

フォームでのバリデーターの実行方法の詳細については、フォーム検証を参照してください。モデルでの実行方法については、検証オブジェクトを参照してください。 モデルを保存するときにバリデーターは自動的に実行されないことに注意してください。ただし、 ModelForm を使用している場合は、フォームに含まれるすべてのフィールドでバリデーターが実行されます。 モデル検証がフォームとどのように相互作用するかについては、 ModelFormドキュメントを参照してください。


組み込みのバリデーター

django.core.validators モジュールには、モデルフィールドとフォームフィールドで使用するための呼び出し可能なバリデーターのコレクションが含まれています。 これらは内部で使用されますが、独自のフィールドで使用することもできます。 これらは、カスタムfield.clean()メソッドに加えて、またはその代わりに使用できます。

RegexValidator

class RegexValidator(regex=None, message=None, code=None, inverse_match=None, flags=0)
パラメーター
  • regexNoneでない場合、 regex をオーバーライドします。 正規表現文字列またはコンパイル済みの正規表現にすることができます。

  • メッセージNoneでない場合、メッセージをオーバーライドします。

  • codeNoneでない場合、 code をオーバーライドします。

  • reverse_matchNoneでない場合、 reverse_match をオーバーライドします。

  • flagsNoneでない場合、 flags をオーバーライドします。 その場合、 regex は正規表現文字列である必要があります。そうでない場合、TypeErrorが発生します。

RegexValidator は、提供されたvalueで、re.search()を使用して特定の正規表現を検索します。 デフォルトでは、一致するが見つからない場合の場合、メッセージおよびコードValidationError が発生します。 reverse_matchTrueに設定すると、その動作を反転できます。この場合、一致するであると、 ValidationError が発生します。

regex

re.search()を使用して、提供されたvalue内で検索する正規表現パターン。 これは、re.compile()で作成された文字列またはコンパイル済みの正規表現である可能性があります。 デフォルトは空の文字列で、可能なすべてのvalueにあります。

message

検証が失敗した場合に ValidationError によって使用されるエラーメッセージ。 デフォルトは"Enter a valid value"です。

code

検証が失敗した場合に ValidationError によって使用されるエラーコード。 デフォルトは"invalid"です。

inverse_match

正規表現の一致モード。 デフォルトはFalseです。

flags

正規表現文字列 regex をコンパイルするときに使用される regexフラグregex がプリコンパイルされた正規表現であり、 flags がオーバーライドされると、TypeErrorが発生します。 デフォルトは0です。


EmailValidator

class EmailValidator(message=None, code=None, allowlist=None)
パラメーター
  • メッセージNoneでない場合、メッセージをオーバーライドします。

  • codeNoneでない場合、 code をオーバーライドします。

  • allowlistNoneでない場合、 allowlist をオーバーライドします。

message

検証が失敗した場合に ValidationError によって使用されるエラーメッセージ。 デフォルトは"Enter a valid email address"です。

code

検証が失敗した場合に ValidationError によって使用されるエラーコード。 デフォルトは"invalid"です。

allowlist

メールドメインの許可リスト。 デフォルトでは、正規表現(domain_regex属性)を使用して、@記号の後に表示されるものを検証します。 ただし、その文字列がallowlistに表示される場合、この検証はバイパスされます。 指定しない場合、デフォルトのallowlist['localhost']です。 ドットを含まない他のドメインは検証に合格しないため、必要に応じてallowlistに追加する必要があります。

バージョン3.2以降非推奨: whitelistパラメーターは非推奨です。 代わりに allowlist を使用してください。 文書化されていないdomain_whitelist属性は非推奨です。 代わりにdomain_allowlistを使用してください。


URLValidator

class URLValidator(schemes=None, regex=None, message=None, code=None)

RegexValidator サブクラスは、値がURLのように見えることを保証し、そうでない場合は'invalid'のエラーコードを発生させます。

ループバックアドレスと予約済みIPスペースは有効と見なされます。 リテラルIPv6アドレス( RFC 3986#section-3.2.2 )とUnicodeドメインの両方がサポートされています。

RegexValidator クラスのオプションの引数に加えて、URLValidatorは追加のオプションの属性を受け入れます。

schemes

検証するURL / URIスキームリスト。 指定しない場合、デフォルトのリストは['http', 'https', 'ftp', 'ftps']です。 参考までに、IANA Webサイトには、有効なURIスキームの完全なリストがあります。


validate_email

validate_email
カスタマイズなしの EmailValidator インスタンス。


validate_slug

validate_slug
値が文字、数字、アンダースコア、またはハイフンのみで構成されることを保証する RegexValidator インスタンス。


validate_unicode_slug

validate_unicode_slug
値がUnicodeの文字、数字、アンダースコア、またはハイフンのみで構成されることを保証する RegexValidator インスタンス。


validate_ipv4_address

validate_ipv4_address
値がIPv4アドレスのように見えることを保証する RegexValidator インスタンス。


validate_ipv6_address

validate_ipv6_address
django.utils.ipv6を使用して、IPv6アドレスの有効性を確認します。


validate_ipv46_address

validate_ipv46_address
validate_ipv4_addressvalidate_ipv6_addressの両方を使用して、値が有効なIPv4アドレスまたはIPv6アドレスのいずれかであることを確認します。


validate_comma_separated_integer_list

validate_comma_separated_integer_list
値がコンマで区切られた整数のリストであることを保証する RegexValidator インスタンス。


int_list_validator

int_list_validator(sep=',', message=None, code='invalid', allow_negative=False)
文字列がsepで区切られた整数で構成されていることを確認する RegexValidator インスタンスを返します。 allow_negativeTrueの場合、負の整数を使用できます。


MaxValueValidator

class MaxValueValidator(limit_value, message=None)
valuelimit_valueより大きい場合、コード'max_value'ValidationError を発生させます。これは呼び出し可能である可能性があります。


MinValueValidator

class MinValueValidator(limit_value, message=None)
valuelimit_valueより小さい場合、コード'min_value'ValidationError を発生させます。これは呼び出し可能である可能性があります。


MaxLengthValidator

class MaxLengthValidator(limit_value, message=None)
valueの長さがlimit_valueより大きい場合、コード'max_length'ValidationError を発生させます。これは呼び出し可能である可能性があります。


MinLengthValidator

class MinLengthValidator(limit_value, message=None)
valueの長さがlimit_value未満の場合、コード'min_length'ValidationError を発生させます。これは呼び出し可能である可能性があります。


DecimalValidator

class DecimalValidator(max_digits, decimal_places)
次のコードで ValidationError を発生させます。
  • 桁数がmax_digitsより大きい場合は'max_digits'
  • 'max_decimal_places'小数点以下の桁数がdecimal_placesより大きい場合。
  • 'max_whole_digits'全桁数がmax_digitsdecimal_placesの差よりも大きい場合。


FileExtensionValidator

class FileExtensionValidator(allowed_extensions, message, code)

value.nameの拡張子(valueファイル)が見つからない場合、コード'invalid_extension'ValidationError を発生させますallowed_extensionsで。 拡張機能は、allowed_extensionsと大文字と小文字を区別せずに比較されます。

警告

ファイルの種類を判別するために、ファイル拡張子の検証に依存しないでください。 ファイルに含まれるデータに関係なく、ファイルの名前を変更して任意の拡張子を付けることができます。


validate_image_file_extension

validate_image_file_extension
Pillowを使用して、value.namevalueファイル)に有効な画像拡張子があることを確認します。


ProhibitNullCharactersValidator

class ProhibitNullCharactersValidator(message=None, code=None)

str(value)に1つ以上のヌル文字('\x00')が含まれている場合、 ValidationError が発生します。

パラメーター
  • メッセージNoneでない場合、メッセージをオーバーライドします。

  • codeNoneでない場合、 code をオーバーライドします。

message

検証が失敗した場合に ValidationError によって使用されるエラーメッセージ。 デフォルトは"Null characters are not allowed."です。

code

検証が失敗した場合に ValidationError によって使用されるエラーコード。 デフォルトは"null_characters_not_allowed"です。