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;
}
このようなスタイルシートを宣言することで、エラー発生時
こんな感じで表示させることができます。

以前は英語表示だったと思うのですが、
日本語表示されるよう変わっています。
※日本語表示されないエラーもあります。
もどる