お気に入り | 日本語 | ログイン

webapp を使ったフォームの操作

ユーザーがグリーティング メッセージを投稿できるようにするには、ウェブ フォームから送信された情報を処理するための方法が必要です。webapp フレームワークを使えば、フォーム データの処理が容易になります。

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 する方法です。

データストアの使用に進みます。