處理表單中的使用者輸入資訊

在這個部分的 Python 留言板程式碼逐步教學中,您將瞭解如何處理使用者輸入內容。

本頁面是多頁教學課程的一部分。如要從頭開始,並查看設定的操作說明,請前往建立留言板頁面。

設定應用程式以使用 webapp2

留言板範例使用的是 webapp2 架構,此架構隨附在 App Engine 環境和 App Engine Python SDK 中。您不需要將 webapp2 與應用程式程式碼組合即可使用。

app.yaml 檔案會指定應用程式使用 webapp2 架構:

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

webapp2 應用程式有兩個部分:

  • 一或多個 RequestHandler 類別,負責處理要求和建立回應。
  • 一個 WSGIApplication 執行個體,根據網址將傳入要求轉送至處理常式。

app.yaml 檔案會指定以 guestbook.py 中的 app 物件做為所有網址的處理常式:

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

- url: /bootstrap
  static_dir: bootstrap

- url: /.*
  script: guestbook.app

針對表單提交作業定義處理常式

guestbook.py 中的 app 物件是 WSGIApplication,可定義要使用哪些指令碼來針對指定網址處理要求。

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

如果處理常式發生錯誤或發生未偵測到的例外狀況,debug=True 參數會指示 webapp2 在瀏覽器輸出結果中顯示堆疊追蹤。部署應用程式的最終版本前請移除這個選項,否則您會在無意間暴露應用程式的內部資訊。

Guestbook 處理常式有一個 post() 方法,而非 get() 方法。這是因為 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 標準環境