Pylons 0.9.7 で validate



Pylonsで入力された値を検証するには、FormEncodeのValidatorを使用します。
http://www.formencode.org/Validator.html

Pylons0.9.7でValidatorを使ってみます。

Pylons0.9.6ではValidatorが暗黙でインポートされていましたが、
Pylons0.9.7では、明示的にインポートする必要があります。

http://pylonshq.com/docs/en/0.9.7/forms/#validating-user-input-with-formencode

コントローラーにvalidateのインポートを追加します。

from pylons.decorators import validate


次に、検証ルールを記載するモジュール
model/form.py
を作成します。

# -*- coding:utf-8 -*-

import formencode

class ValidateForm(formencode.Schema):
    allow_extra_fields = True
    filter_extra_fields = True

    document = formencode.validators.String(min=5,max=20)


これで、documentという名前のテキストボックスに対して、
5文字以上、20文字以下の検証ルールを適用することができます。


コントローラーには

@validate(schema=ValidateForm(), form='new')
def create(self):


createはデータベースへの登録を実行するメソッドです。
実行前に検証を行ないたいメソッドの直前に、@validateを
記載します。

引数は、
schema:検証に使用するクラス名
form:検証に失敗した場合に実行するメソッド名

この場合、ValidateFormクラスの検証が失敗したら、
コントローラーのnewメソッドが実行されることになります。

このnewメソッドの内容ですが、

def new(self, format='html'):
    return render('/new.mako')


テンプレートを読み込んで表示するだけのメソッドです。

これだけで、
・エラーになった場合、new.makoに直前に入力していた値を反映
・エラーが発生した箇所の直前にエラーメッセージを挿入
・エラーが発生したテキストボックスにスタイルシートを設定
という操作が自動的に実行されます。


エラーメッセージには「error-message」
エラーが発生したオブジェクトには「error」
というクラス名称が設定されます。

それなので、

span.error-message {
    color: red;
    font-weight: bold;
}
input.error {
    background-color: yellow;
}


このようなスタイルシートを宣言することで、エラー発生時
こんな感じで表示させることができます。



以前は英語表示だったと思うのですが、
日本語表示されるよう変わっています。

※日本語表示されないエラーもあります。


もどる