画面遷移
と画面遷移をする実装を行います。
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にデコードするビルトイン関数です。
登録画面では、おなじ”登録”という文字列があったのに正常に表示されています。
ユニコード問題はわからないことがあるので、今後詳しく調査しようと思います。
というわけで、画面遷移自体は割と簡単に出来ました。
まぁほんとに単純な遷移で、ログインセッションのこととか、入力チェックもなんにもやってないので簡単なんですが。。。
そういったことは今後の記事で一つ一つ積み上げていきます。
次回は、データストアへのアクセスを行います。