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

使用 webapp 架構

CGI 標準很簡單,但是若要用親手編寫所有程式則是有點麻煩。網路應用程式架構會為您處理這些細節,您可以專注於開發應用程式的功能。「Google 應用服務引擎」支援以純 Python 編寫的 CGI (以及使用 CGI 配接程式的任何 WSGI 相容架構) 架構,包括 DjangoCherryPyPylons 以及 web.py。 您只要將您選擇類型的程式碼複製到應用程式目錄中,就可以將它與您的應用程式整合在同樣的架構。

「應用服務引擎」包括其本身簡單的網路應用程式架構,稱為 webappwebapp 架構已安裝在「應用服務引擎」環境和 SDK 中,所以您不需要將它放在應用程式碼中,就可以使用它。在接下來的教學課程中,我們將會使用 webapp

簡介 webapp

webapp 應用程式有三個部分:

  • 一或多個 RequestHandler 類別,可處理要求要建置反應
  • 一個 WSGIApplication 實例,會根據 URL 將連入要求傳送至處理常式
  • 一個主要常式,使用 CGI 配接程式來執行 WSGIApplication

讓我們將熟悉的訊息應用程式改寫為 webapp 應用程式。編輯 helloworld/helloworld.py,並以下列各項取代其內容:

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.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

在瀏覽器中重新載入 http://localhost:8080/,查看新版本的實際樣子。(若您已停止網頁伺服器,請以 "Hello, World!" 中描述的命令重新啟動它。)

webapp 會做什麼

webapp 模組位於 google.appengine.ext 套件。此模組提供於 SDK 以及實際執行階段環境。

此程式碼定義一個要求處理常式 (MainPage),對應至根 URL (/)。當 webapp 接收到 HTTP GET 要求該 URL / 時,它會具現化 MainPage 類別並呼叫實例的 get 方法。在該方法中,可以使用 self.request 取得要求的資訊。一般而言,方法會設定 self.response 的屬性,並準備回應,然後結束。webapp 會根據 MainPage 實例的最後狀態來傳送回應。

應用程式本身則會由 webapp.WSGIApplication 實例代表。傳遞給其建構函式的參數 debug=true,會告訴 webapp 將堆疊追蹤列印至瀏覽器輸出 (若處理常式發生錯誤或引發無法識別的例外狀況)。您可能會在應用程式的最終版本中移除此選項。

函式 run_wsgi_app() 接受 WSGIApplication 實例 (或另一個 WSGI 相容的應用程式物件) 並於「應用服務引擎」的 CGI 環境中執行。在 Python 標準程式庫中,run_wsgi_app()wsgiref 模組提供的 WSGI-to-CGI 配接程式相似,但是多了一些其他功能。例如,它可以自動偵測應用程式執行於開發伺服器或應用服務引擎,並於瀏覽器中顯示錯誤 (若執行於開發伺服器)。

我們將於此教學課程稍後使用一些 webapp 的其他功能。如需關於 webapp 的詳細資訊,請參閱 webapp 參考資料

接下來...

架構讓網路應用程式開發變得更輕鬆、更快速且更少錯誤。webapp 只是 Python 眾多架構之一。現在我們已經旣然使用架構,就讓我們來新增一些功能吧!

繼續瀏覽「運用使用者服務」一節。