私の web.py プロジェクトからのスニペットで答えさせてください。
bookeditform = form.Form(
form.Textbox('title', form.notnull),
form.Textbox('author', form.notnull),
form.Textbox('year',
form.Validator('Must be a number', lambda x: not x or int(x) > 0)),
)
# ...
class NewBookHandler:
def GET(self):
f = bookeditform()
return render.bookedit(f, "New book")
def POST(self):
f = bookeditform()
if f.validates():
newid = db.insert('book', title=f.d.title,
author=f.d.author, year=f.d.year)
raise web.seeother('/book/%s' % newid)
else:
return render.bookedit(f, "New book")
要約:
- ハンドラー on
GET
では、空のフォームを単純にレンダリングします。
- で、フォーム
POST
をロードし、有効かどうかを確認します。
- その場合は、必要なアクションを実行し、ユーザーを成功ページにリダイレクトします。
POST
ユーザーはページを更新して同じアクションをやり直すことができるため、 では何もレンダリングしないでください。
- そうでない場合は、フォームを再レンダリングします (入力されたデータが含まれ、エラー メッセージが表示されます)。