前章で作成したファイルHello.cpyを編集し、以下のように変更します:
CherryClass Root: mask: def index(self, name="you"): <html><body> Hello, <b py-eval="name"></b> ! <form py-attr="request.base" action="" method="get"> Enter your name: <input name=name type=text><br> <input type=submit value=OK> </form> </body></html>
ファイルを再度コンパイルしてサーバーを再起動してください。そうしたらブラウサ上のページを再読み込みしてみてください。以下のように見えるはずです
Hello, you
すぐ後にテキストを入力できるフィールドが続きます。あなたの名前を入れてOKボタンを押してください。これで変更された文字は、
Hello, "your name"
どうやって動くのでしょうか?
今回、indexメソッドはnameと呼ばれるパラメータを持ちます。他のPythonのメソッドのように、 このパラメータはデフォルト値を持つ事ができます(今回の場合、you)。ブラウザがこのページをまず最初に閲覧した場合、nameパラメータは何も持ちませんので、nameはこの関数ではデフォルト値をとります。
あなたがテキストフィールドに何か書き込んでOKを押すと、ブラウザは同じページをリクエストしますが、今回の場合nameはパラメータとして受け渡され、それにあなたが入力した名前が入っているはずです。
form中でmethod="getを使ったので、パラメータnameはURL(あなたはブラウザ上でhttp://localhost:8000/?name=yourName というような形のURLで確認することができます)を使って受け渡されます。
さて、Hello.cpyを編集し、method="get"をmethod="post"に変えてみてください。ファイルをリコンパイルしサーバを再起動し、テストをやり直してください: name=yourNameがURLにでてこない以外は全て同じように動きます。これはformでGETメソッドの代わりにPOSTメソッドを使ったためです。
ここで学んだことは:
テンプレート言語を使ってもっと面白いことをする時がきました。。。