バリデータ

revision-up-to:17812 (1.4)
リリースノートを参照してください

バリデータを書く

バリデータ (validator) は、一つの値を引数に取り、何らかの条件に合わなければ ValidationError を送出する呼び出し可能オブジェク トです。異なる種類のフィールド間で検証処理を再利用するためにバリデータを使うこと もできます。

たとえば、偶数だけを許可するバリデータは次のようになります:

from django.core.exceptions import ValidationError

def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(u'%s is not an even number' % 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])

バリデータの実行方法

バリデータがフォームでどのように実行されるかについては フォームの検証 を、モデルでどのように実行されるかについては オブジェクトの検証 を参照してください。なおモデルの 保存時にバリデータが自動的に実行されることはありませんが、 ModelForm を使っている場合は、バリデータがフォーム中の 全フィールドにて実行されます。モデルの検証とフォームとの連携については ModelForm のドキュメント を参照してください。

組み込みバリデータ

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

RegexValidator

class RegexValidator([regex=None, message=None, code=None])
Parameters:
  • regexNone でなければ、 regex をオーバーライドします。 正規表現文字列か、コンパイル済み正規表現オブジェクトを使用できます。
  • messageNone でなければ、 message をオーバーライド します。
  • codeNone でなければ、 code をオーバーライドします。
regex

指定された value を検索するための、正規表現文字列またはコンパイル 済み正規表現オブジェクトです。もし何もマッチしなかった場合、 messagecode を設定した ValidationError を送出します。デフォルト では、あらゆる文字列にマッチします (空文字列にもマッチします)。

message

検証に失敗したときに ValidationError が 使うエラーメッセージです。デフォルトでは "Enter a valid value" になります。

code

検証に失敗したときに ValidationError が 使うエラーコードです。デフォルトでは "invalid" になります。

URLValidator

class URLValidator([verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT])

値が URL に見えること、またオプションでその URL が実際に存在する (つまり 404 ステータスコードが返らない) ことを確認する RegexValidator です。 値が URL に見えない場合はエラーコード 'invalid' で、その URL が実際に 存在しない場合はエラーコード 'invalid_link' で送出します。

Parameters:
  • verify_existsverify_exists を設定します。デフォルトでは False になります。
  • validator_user_agentvalidator_user_agent を設定します。 デフォルトでは URL_VALIDATOR_USER_AGENT になります。ただし もしその設定に null 値が設定されている場合は "Django (https://www.djangoproject.com/)" になります。
verify_exists

True に設定すると、このバリデータは URL が実際に存在するか確認 します。

validator_user_agent

verify_existsTrue の場合、 Django は URL の存在を確認 するリクエストの “User-agent” としてこの値を使用します。

validate_email

validate_email

値がメールアドレスに見えることを確認する RegexValidator のインスタ ンスです。

validate_slug

validate_slug

値がアルファベット、数字、アンダースコア、ハイフンだけで構成されていることを 確認する 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 のインスタンスです。

MaxValueValidator

class MaxValueValidator(max_value)

valuemax_value より大きい場合にコード 'max_value'ValidationError を送出します。

MinValueValidator

class MinValueValidator(min_value)

valuemin_value より小さい場合にコード 'min_value'ValidationError を送出します。

MaxLengthValidator

class MaxLengthValidator(max_length)

value の長さが max_length より長い場合にコード 'max_length'ValidationError を送出します。

MinLengthValidator

class MinLengthValidator(min_length)

value の長さが min_length より短い場合にコード 'min_length'ValidationError を送出します。