form
web.pyモジュールを使用しているweb.pyチュートリアルに従っています。基本的に、この小さなアプリはテキストボックスで構成されるフォームを作成し、それが数値であり、10より大きいことを確認するための検証を行い、その数値が奇数か偶数かを判断します。わかりやすくなるように、質問の前にコードを投稿します。
code.py
import web
from web import form
urls = (
'/', 'hello')
number_form = form.Form(
form.Textbox('number',
form.notnull,
form.regexp('^-?\d+$', 'Not a number.'),
form.Validator('Not greater than 10.', lambda x: int(x)>10),
description='Enter a number greater than 10:'
))
app = web.application(urls, globals(), autoreload=True)
render = web.template.render('templates/')
class hello:
def GET(self):
my_form = number_form()
return render.hello(my_form)
def POST(self):
my_form = number_form()
if not my_form.validates():
return render.hello(my_form)
else:
number = my_form['number'].value
if int(number) % 2:
return "Your number %s is odd." % number
else:
return "Your number %s is even." % number
if __name__ == "__main__":
app.run()
hello.html
$def with (form)
<form name="test" method="POST">
$if not form.valid: <p><b>Sorry, your input was invalid.</b></p>
$:form.render()
<input type="submit" value="Go" />
</form>
さて、私の質問は、作成時に定義されたバリデーターについてnumber_form
です。行を変更する場合:
form.regexp('^-?\d+$', 'Not a number.'),
次のようなものに:
form.regexp('^-?\d+$', 'Not a number.'),
出力は変わりません!それでもNot a number.
、その検証に失敗したかどうかを示しています。しかし、私がそれを次のようなものに変更した場合:
form.regexp('^-?\d+$', 'NOT A NUMBER.'),
が表示さNOT A NUMBER.
れるので、その行を解釈していて、実際に変更が加えられたことがわかります。
いくつかの異なる文字列を試しましたが、スペースなどを切り捨てているようです。スペース、改行、タブなどを追加することを除いて、すべてが正常に機能するように変更しました。
何が得られますか?