フォームのユーザー入力の処理

Python ゲストブック コード チュートリアルのこの部分では、ユーザー入力の処理方法を説明します。

このページは複数のページからなるチュートリアルの一部です。設定の手順を最初から確認する場合はゲストブックの作成に移動してください。

webapp2 を使用するようにアプリを構成する

ゲストブックのサンプルでは、webapp2 フレームワークを使用します。このフレームワークは、App Engine 環境と App Engine Python SDK に含まれています。webapp2 はアプリケーション コードにバンドルしなくても使用できます。

app.yaml ファイルには、アプリが webapp2 フレームワークを使用することが指定されています。

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest

webapp2 アプリケーションは 2 つの部分で構成されています。

  • 1 つ以上の RequestHandler クラス。リクエストを処理し、レスポンスを作成します。
  • WSGIApplication インスタンス。受信リクエストを URL に基づいてハンドラにルーティングします。

app.yaml ファイルには、すべての URL のハンドラとして guestbook.pyapp オブジェクトが指定されています。

handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

フォーム送信のハンドラを定義する

guestbook.pyapp オブジェクトは、特定の URL のリクエストを処理するスクリプトが定義された WSGIApplication です。

app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/sign', Guestbook),
], debug=True)

debug=True パラメータにより、ハンドラがエラーを検出するか、予期しない例外が発生した場合に webapp2 がスタック トレースをブラウザに出力します。このオプションは、アプリケーションの最終バージョンをデプロイする前に削除する必要があります。削除しないと、アプリケーションの内部が外部に公開されてしまいます。

Guestbook ハンドラのメソッドは、get() ではなく post() です。MainPage が表示するフォームは、フォームデータの送信に HTTP POST メソッドを使用します。

class Guestbook(webapp2.RequestHandler):

    def post(self):
        # We set the same parent key on the 'Greeting' to ensure each
        # Greeting is in the same entity group. Queries across the
        # single entity group will be consistent. However, the write
        # rate to a single entity group should be limited to
        # ~1/second.
        guestbook_name = self.request.get('guestbook_name',
                                          DEFAULT_GUESTBOOK_NAME)
        greeting = Greeting(parent=guestbook_key(guestbook_name))

        if users.get_current_user():
            greeting.author = Author(
                    identity=users.get_current_user().user_id(),
                    email=users.get_current_user().email())

        greeting.content = self.request.get('content')
        greeting.put()

        query_params = {'guestbook_name': guestbook_name}
        self.redirect('/?' + urllib.urlencode(query_params))

post() メソッドは self.request からフォームデータを取得します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 2 の App Engine スタンダード環境