Google Code が利用できる言語: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
CGI 標準はシンプルですが、コードをすべて手で記述するのは面倒です。Web アプリケーション フレームワークは瑣末な作業を処理してくれるため、ユーザーはアプリケーション機能の開発に集中することができます。Google App Engine では、Python のみで書かれ、かつ CGI を使用するフレームワーク(または CGI アダプタを使用した WSGI 準拠のフレームワーク)であれば、どのフレームワークでも使用できます。たとえば、Django、CherryPy、Pylons、web.py などをサポートしています。任意のフレームワークをアプリケーション コードとバンドルするには、フレームワークのコードをアプリケーションのディレクトリにコピーします。
App Engine には、シンプルな独自の Web アプリケーション フレームワークが用意されています。これが webapp です。webapp フレームワークは App Engine 環境と SDK にインストール済みであるため、アプリケーション コードとバンドルしなくても使用できます。このチュートリアルでは以降、webapp を使用します。
webapp には、次の 3 つのパーツがあります。
RequestHandler クラス。リクエストを処理し、レスポンスを作成します。WSGIApplication インスタンス。着信したリクエストを、URL と関連付けられたハンドラへルーティングします。WSGIApplication を実行します。グリーティング メッセージを webapp アプリケーションに書き換えてみましょう。helloworld/helloworld.py を編集し、コンテンツを次のように置き換えます。
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
ブラウザで http://localhost:8080/ をリロードし、新しいアクションになっているのを確認します(Web サーバーを停止している場合、Hello, World! で説明したコマンドを実行して再起動します)。
webapp モジュールは google.appengine.ext パッケージに含まれています。このモジュールは、プロダクション ランタイム環境だけでなく、SDK でも提供されています。
このコードは、ルート URL(/)に対する 1 つのリクエスト ハンドラ MainPage のマッピングを定義しています。webapp はこの URL / への HTTP GET リクエストを受信すると、MainPage クラスをインスタンス化し、インスタンスの get メソッドを呼び出します。メソッド内では、self.request を使用して、リクエストに関する情報を利用できます。一般にメソッドは、self.response でプロパティを設定し、レスポンスの準備をしてから終了します。webapp は、MainPage インスタンスの最終状態に基づいてレスポンスを送信します。
アプリケーション自体は、webapp.WSGIApplication インタンスで表現されます。コンストラクタに渡されるパラメータ debug=true は、ハンドラにエラーが発生したり、捕捉されなかった例外が返された場合に、スタック トレースをブラウザに出力するよう webapp に指示するものです。このオプションは、アプリケーションの最終バージョンから削除しても構いません。
関数 run_wsgi_app() は WSGIApplication インスタンス(または他の WSGI に準拠したアプリケーション オブジェクト)を使用し、それを App Engine の CGI 環境で実行します。run_wsgi_app() は、Python 標準ライブラリの wsgiref モジュールで提供される WSGI-CGI アダプタとほぼ同じですが、いくつかの機能が追加されています。たとえば、アプリケーションが開発用サーバーと App Engine のどちらで実行されているかを自動的に検出し、開発用サーバーで実行されているときは、ブラウザにエラーを表示する機能があります。
このチュートリアルの残りの部分では、さらにいくつかの webapp 機能を使用します。webapp に関する詳しい情報は、webapp リファレンスをご覧ください。
フレームワークを使うと、Web アプリケーションの開発が容易で迅速になるだけでなく、エラーを防ぐ効果もあります。webapp は、Python で利用できるさまざまなフレームワークの 1 つにすぎません。フレームワークを使うからには、もう少し機能を追加してみましょう。
ユーザー サービスの使用に進みます。