2010年3月14日日曜日

PythonでGAE編 2.画面遷移を行う

画面遷移

登録画面→登録ボタン→登録結果画面
と画面遷移をする実装を行います。

WSGIApplicationへのパラメータ追加

WSGIApplicationの引数には、URLとハンドラクラスのマッピングを設定していました。
今回追加の登録結果画面へのURLとハンドラクラスの設定を追加します。
以下の赤字部分を追加です。
URLを/entryとし、リクエストハンドラクラスはEntryとします。

---------------------------------------------------------------------------
application = webapp.WSGIApplication(
[('/', MainPage),
('/entry', Entry)],
debug=True)
---------------------------------------------------------------------------

RequestHandlerクラスの追加

Entryクラスを追加します。
登録結果画面のHTMLを送出する処理を行っています。
登録画面では、POST送信をしているので、今回のメソッドは
def post(self)
となります。

---------------------------------------------------------------------------
class Entry(webapp.RequestHandler):
def post(self):
self.response.out.write('<html><body>')
self.response.out.write(unicode('<div>金額:','UTF-8'))
self.response.out.write(cgi.escape(self.request.get('amount')))
self.response.out.write('</div>')
self.response.out.write(unicode('<div>事由:','UTF-8'))
self.response.out.write(cgi.escape(self.request.get('cause')))
self.response.out.write('</div>')
self.response.out.write('</form>')
self.response.out.write('</body></html>')
---------------------------------------------------------------------------

request.get

登録画面で送信したリクエストパラメータを取得します。
self.request.get('パラメータ名称')
で取得出来ます。
cgi.escapeはHTMLのタグ文字のエスケープを行います。


ユニコードの問題

以下のようにレスポンスに日本語を設定したら、エンコードの失敗のようでエラーとなってしまいました。

self.response.out.write(<div>'金額:')

こんなエラーメッセージ

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 5: ordinal not in range(128)

ユニコードの扱いに問題ありそうです。


とりあえずこのようにすると↓↓↓

self.response.out.write(unicode('<div>事由:','UTF-8'))

表示することができました。
unicodeにデコードするビルトイン関数です。

登録画面では、おなじ”登録”という文字列があったのに正常に表示されています。
ユニコード問題はわからないことがあるので、今後詳しく調査しようと思います。

というわけで、画面遷移自体は割と簡単に出来ました。
まぁほんとに単純な遷移で、ログインセッションのこととか、入力チェックもなんにもやってないので簡単なんですが。。。
そういったことは今後の記事で一つ一つ積み上げていきます。


次回は、データストアへのアクセスを行います。