CGI in Google App Engine ==================================== :Author: Frankie Chow :Version: 2 :Copyright: Creative Commons licenses :Date: 2009-3-14 :Category: Notes, Python, GAE :Description: 介紹在 google app engine 下使用 python lib cgi. :ShortName: CGI in gae .. contents:: Python 的 CGI 模組 =============================== 我不喜歡跟 Getting Started: Python 來介紹 GAE !這樣的介紹對了解 GAE 幫助也不大。 那我們換另一個角度來講吧。 還記得我們的 TestGAE 嗎。 TestGAE 中的 app.yaml ================================ 我們修改一下 TestGAE 目錄下 app.yaml 的內容。 :: application: tt version: 2 runtime: python api_version: 1 handlers: - url: / script: main2.py - url: /cgi/ script: main3.py 修改 version -------------------------- 這裡我們修改了 version 中的數值,這裡把它改作 2 。在我們主機測試的環境下修改這數值是沒有特別意義的, 但是如果您的 app 已登記和上載到 appengine_ 上,那意義就很大了!因為 google 是會分別存放兩個不同的版本。 .. _appengine: http://appengine.google.com/ 修改 handlers --------------------------- 這裡我們修改了 handlers 下的不同資料。 :: handlers: - url: / script: main2.py - url: /cgi/ script: main3.py 這裡告訴 app engine server ,如果客戶 request url: / 的話,那就執行 main2.py 。 而 request url: /cgi/ 的話,那就執行 main3.py ! TestGAE 下不同的 python 程式 =========================================== 在我們 TestGAE 下除了 app.yaml 外,就只有兩個不同的 python 程式︰ * main2.py * main3.py 試看其中的內容,可能對我們會有一定的啟發! main2.py 下的內容 ------------------------------------ 以下是我們 main2.py 的內容︰ .. sourcecode:: python print '''Content-Type: text/html

You name:

Submit:

''' 這是一個很簡單的 html form ,但是因為 app engine server 是會拿來執行的,所以我們就用 print 這個指令列印出來。 不同的 Input 欄位 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這裡我們可以看見兩個 input 欄位︰ 1. clientname 2. submit 我們可以在 clientname 中輸入自己的名稱,另外也可以透過 submit 來提交其中的數值。 main3.py 下的內容 --------------------------------------- 以下是我們 main3.py 的內容︰ .. sourcecode:: python import cgi def main(): print "Content-type: text/html\n" form = cgi.FieldStorage() if form.has_key("clientname") and \ form["clientname"].value != "": print "

Hello ", \ form["clientname"].value, "

" else: print "

Error! Enter your name.

" main() 這裡我們 import cgi 的模組。這模組的作用是用來接收從 html form 傳入的數值!及加以作出反應的。 我們怎樣可以接收到 cgi 傳來的數值?!我們就是使用 cgi.FieldStorage 這模組來接收。 cgi.FieldStorage ================================= 當我們使用 cgi.FieldStorage 時,我們只要如下︰ .. sourcecode:: python form = cgi.FieldStorage() 那我們就會產生一個 form 的 object,而當中有不同的 key 和數值。 我們可以使用 form.has_key(key) 來檢查 key 是否存在,另外也可以使用 form[key].value 來提取當中的數值。 測試 ========== 所以當您瀏覽器瀏覽 http://127.0.0.1:8080/ 時,您會獲得一個簡單的 web form ,而當您填入您的名字及提交後, 您就可以得到不同的結果。 例如當我在 web form 中填入自己的名字後如 Frankie 後,我就可以在 http://127.0.0.1:8080/cgi/ 時看見以下的字串。 :: Hello Frankie 當您看見如上的字串後,您的 web form 就成功了。 結語 ============= 其實有 cgi 模組後,您就可以開始編寫自己的網頁了,不過我想在這樣的環境編寫 GAE 是絕對不好過的事情。