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 欄位︰

  1. clientname
  2. 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 是絕對不好過的事情。


Comments: (log in to comment)