Pylons 0.9.7 で validate 使用できる検証ルール
Pylons0.9.7ではFormEncodeのValidatorを使用して、
入力された値の検証を行ないます。
Validatorで使用できる検証ルールを調べてみました。
前提条件として、validatorsに用意されているルールは
api.FancyValidatorを継承して作成されています。
そのため、以下の設定はすべてのルールで使用できます。
【共通項項目】
■if_empty
入力値が空白の場合、if_emptyで指定した値に置き換えられます。
■not_empty
True:空白不可
False(デフォルト):空白許可
■strip
True:stripした値を返す
False(デフォルト):そのままの値を返す
■if_invalid
If set, then when this validator would raise Invalid during
``.to_python()``, instead return this value.
■if_invalid_python
If set, when the Python value (converted with
``.from_python()``) is invalid, this value will be returned.
■accept_python
If True (the default), then ``.validate_python()`` and
``.validate_other()`` will not be called when
``.from_python()`` is used.
validatorにより、検証を通過した値を取得するには、
self.form_result.get('document')
リクエストで送信された値を取得するには
request.params['document']
とします。
if_emptyを指定している場合は、self.form_result.get
を使用しないと、変換された値が取得できません。
※地味にこれではまりました。
これを踏まえて、validatorsで宣言されているクラスを見てみます。
【文字数の最大値を指定する】
formencode.validators.MaxLength
10文字以内に制限する場合
MaxLength(10)
※10文字を超えて入力した場合、
「長さ10文字以下で入力してください」(tooLong)
10文字以内、且つ空白不可に制限する場合
MaxLength(10,not_empty=True)
※空白の場合
「入力してください」(empty)
【文字数の最小値を指定する】
formencode.validators.MinLength
5文字以上に制限する場合
MinLength(5)
※5文字より少ない入力の場合
「長さ5文字以上で入力してください」(tooShort)
【空白不可とする】
formencode.validators.NotEmpty
空白不可とする場合
NotEmpty()
※空白の場合
「入力してください」(empty)
【入力不可とする】
formencode.validators.Empty
入力不可とする場合
Empty()
※入力された場合
「ここに入力しないでください」(notEmpty)
【正規表現による入力制限を行なう】
formencode.validators.Regex
英字大文字のみ入力可能とする場合
Regex(r'^[A-Z]+$')
※英字大文字以外が入力された場合
「入力が正しくありません」(invalid)
もちろん、空白不可のルールと組み合わせ可能です。
Regex(r'^[A-Z]+$',not_empty=True)
【英数字と下線(_)だけ入力を許可する】
formencode.validators.PlainText
英数字と下線(_)だけ入力を許可する場合
PlainText()
※空白などが入力された場合
「英数字と下線(_)だけ入力できます」(invalid)
Regex(r"^[a-zA-Z_\-0-9]*$")とメッセージが異なるだけです。
【リストで指定した内容だけ許可する】
formencode.validators.OneOf
1,2,3のいずれかのみ入力を許可する場合
OneOf(['1','2','3'])
型も比較対象なので、Pylonsで使用する場合にはリストの内容は
文字列で指定する必要があります。
※リスト以外が入力された場合
「1; 2; 3のいずれかでなければなりません(u'a')」(notIn)
「u'a'」となってしまうのが残念です。
【dictで指定した内容だけ許可する】
formencode.validators.DictConverter
1,2,3のいずれかのみ入力を許可し、one,two,threeに変換する場合
DictConverter({'1': 'one', '2': 'two','3':'three'})
1が入力された場合、
self.form_result.get('document')は'one'
request.params['document']は'1'を返します。
※dictのkey以外が入力された場合
「'1'; '3'; '2'から選んでください」(chooseKey)
【リストに含まれている数の範囲の入力だけ許可する】
formencode.validators.IndexListConverter
リストの最大値の範囲だけ入力を許可し、該当するインデックスの
値に変換します。
IndexListConverter(['zero','one','two'])
この場合
0が入力されると'zero'
2が入力されると'two'
3が入力されると「範囲外の値です」(outOfRange)
-1が入力されると'two'
-3が入力されると'zero'
-4が入力されると「範囲外の値です」(outOfRange)
aが入力されると「数値で指定してください」(integer)
という動きになります。
もどる