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 |
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 是會分別存放兩個不同的版本。
修改 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 的內容︰
print '''Content-Type: text/html
<form method="POST" action="/cgi/">
<p>You name:
<input type="text" name="clientname">
<p>Submit:
<input type="submit" name="submit" value="Yeah!">
</form>
'''
這是一個很簡單的 html form ,但是因為 app engine server 是會拿來執行的,所以我們就用 print 這個指令列印出來。
不同的 Input 欄位
這裡我們可以看見兩個 input 欄位︰
- clientname
- submit
我們可以在 clientname 中輸入自己的名稱,另外也可以透過 submit 來提交其中的數值。
main3.py 下的內容
以下是我們 main3.py 的內容︰
import cgi
def main():
print "Content-type: text/html\n"
form = cgi.FieldStorage()
if form.has_key("clientname") and \
form["clientname"].value != "":
print "<h1>Hello ", \
form["clientname"].value, "</h1>"
else:
print "<h1>Error! Enter your name.</h1>"
main()
這裡我們 import cgi 的模組。這模組的作用是用來接收從 html form 傳入的數值!及加以作出反應的。 我們怎樣可以接收到 cgi 傳來的數值?!我們就是使用 cgi.FieldStorage 這模組來接收。
cgi.FieldStorage
當我們使用 cgi.FieldStorage 時,我們只要如下︰
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 是絕對不好過的事情。