My favorites | 中文(繁體) | Sign in
英文版或許有比此中譯版新的內容

以 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()

重新載入頁面以查看表單,然後嘗試提交訊息。

這個版本有兩個處理常式:MainPage,對應至 URL /,顯示網頁表單。Guestbook,對應至 URL /sign,顯示網頁表單提交的資料。

Guestbook 處理常式使用 post() 方法,而非使用 get() 方法。這是因為 MainPage 顯示的表單,使用 HTTP POST 方法 (method="post") 來提交表單資料。若由於某些因素,您需要單一處理常式來處理相同 URL 的 GET 和 POST 二種動作,您可以在相同類別中為每個動作定義方法。

post() 方法的程式碼會從 self.request 取得表單資料。將它顯示給使用者之前,它會使用 cgi.escape() 將 HTML 特殊字元逸出為其對等的字元實體。cgi 是標準 Python 程式庫中的模組;請參閱cgi 的文件以取得詳細資訊。

注意:「應用服務引擎」環境包括完整的 Python 2.5 標準程式庫。不過,並非所有動作都允許。「應用服務引擎」應用程式會在受限制的環境中執行,讓「應用服務引擎」安全地調控這些程式。例如,對作業系統、網路操作以及部分檔案系統操作的低階呼叫都不允許,而且會在嘗試時引發錯誤。如需詳細資訊,請參閱 Python 執行階段環境

接下來...

現在,我們可以收集來自使用者的資訊,我們需要一個位置來放置資訊、以及一種方式來加以取回。

繼續瀏覽「使用資料存放區」一節。