Google Code が利用できる言語: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
ユーザーがグリーティング メッセージを投稿できるようにするには、ウェブ フォームから送信された情報を処理するための方法が必要です。webapp フレームワークを使えば、フォーム データの処理が容易になります。
helloworld/helloworld.py のコンテンツを次のように置き換えます。
import cgi
from google.appengine.api import users
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.out.write("""
<html>
<body>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
</body>
</html>""")
class Guestbook(webapp.RequestHandler):
def post(self):
self.response.out.write('<html><body>You wrote:<pre>')
self.response.out.write(cgi.escape(self.request.get('content')))
self.response.out.write('</pre></body></html>')
application = webapp.WSGIApplication(
[('/', MainPage),
('/sign', Guestbook)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
ページをリロードしてフォームを確認し、メッセージを送信してみます。
このバージョンには 2 つのハンドラがあります。URL / にマッピングされた MainPage は、ウェブ フォームを表示します。URL /sign にマッピングされた Guestbook は、ウェブ フォームで送信されたデータを表示します。
Guestbook ハンドラは、get() メソッドではなく post() メソッドを備えています。この理由は、MainPage によって表示されるフォームは、フォーム データを送信するのに HTTP POST メソッド(method="post")を使用するためです。何らかの理由により、同一の URL に対する GET と POST の両方を 1 つのハンドラで処理する必要がある場合、同一のクラスで各アクションのメソッドを定義することができます。
post() メソッドのコードは、self.request からフォーム データを取得します。このコーディングでは、ユーザーに再表示する前に、cgi.escape() を使用して HTML 特殊文字をエスケープし、等価の文字エンティティに変換します。cgi は、標準の Python ライブラリに含まれるモジュールです。詳しい情報は、cgi のドキュメントをご覧ください。
注: App Engine 環境は、Python 2.5 の標準ライブラリ全体を包含しています。ただし、すべてのアクションが許可されているわけではありません。App Engine アプリケーションは、App Engine がこれらを安全にスケーリングできるように、制限された環境で動作します。たとえば、OS への低レベルの呼び出し、ネットワーク操作、一部のファイル システム操作は許可されていません。これらを試みると、エラーになることがあります。詳しい情報は、Python ランタイム環境をご覧ください。
これで、ユーザーからの情報を収集できるようになりました。必要なのは、このデータを PUT する場所と GET する方法です。
データストアの使用に進みます。