ウェブサーバーゲートウェイインタフェース (WSGI) 標準はシンプルですが、 WSGIを使うためのコードを全て手動で記述するのは大変です。 ウェブアプリケーションサーバがあなたに代わってこれらの詳細を処理するので、あなたのアプリケーションの機能面に開発努力を集中させることができます。 Google App Engine では、Django, CherryPy, Pylons, web.py, web2pyを含む、純正Pythonで記述されたWSGI対応フレームワークをサポートしています。 フレームワークのコードをアプリケーションディレクトリにコピーすることで、任意のフレームワークをアプリケーションにバンドルできます。
App Engine にはwebapp2と呼ばれるシンプルなウェブアプリケーションフレームワークが含まれています。
The webapp2 フレームワークは既に App Engine 環境と App Engine Python SDKにインストールされているので、使用するためにそれをアプリケーションコードにバンドルする必要はありません。
以降のチュートリアルでは webapp2を使用します。
webapp2 アプリケーションには二つのパーツがあります:
RequestHandler クラスWSGIApplication インスタンスそれでは、あらためてHelloアプリケーションを見てみましょう:
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('Hello, World!')
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
このコードでは、ルートURL(/)に紐付けられているリクエストハンドラ MainPageが定義されています。
webapp2がURL /へのHTTP GETリクエストを受信した時、MainPage クラスをインスタンス化してインスタンスの getメソッドを呼び出します。
メソッド内では、self.requestを使ってリクエストに関する情報にアクセスできます。
一般的に、このメソッドはself.responseにプロパティを設定して応答の準備をし、そして終了します。
webapp2 はMainPageインスタンスの最終的なステータスを基にして応答を送信します。
アプリケーション自身はwebapp2.WSGIApplicationインスタンスによって表されます。
debug=trueのパラメータをwebapp2.WSGIApplicationのコンストラクタに引数として渡してインスタンスを作成すると、
ハンドラでエラーが発生したりキャッチできない例外が発生した場合に、webapp2はスタックトレースをブラウザに出力します。
このオプションは、アプリケーションの最終版を配置する前に削除してください。そうしないとあなたのアプリケーションの内部仕様が誤って公開されてしまいます。
以降のチュートリアルでは、 webapp2 の他の機能についても使用します。
webapp2に関する詳細情報については、webapp2 ドキュメントを参照してください。