CgiScripts

/! 這一篇是CgiScripts中譯版本。

CGI Scripts

cgi 模組是Python CGI腳本的核心。

最簡單的CGI腳本可以考慮包括輸出HTTP表頭(“Content-type: text/html”)及一個網頁,另外你可能想要處理來自像是HTML的表單或是請求參數的輸入,在早期的CGI,shell scripts有時用來做這樣的事,所以這些原則不會特別先進。

設定

要取得腳本正確的權限可以在像是Apache的Web服務上執行是一個麻煩的經驗,但是如果遵循這面的檢核或許有一些管用:

  1. 找出哪個使用者可以在Web伺服器執行 – 它不跟你自己的使用者一樣,它很可能是很受限制權限的使用者。
  2. 檢查伺服器設定看看是否可以讓你在特定的目錄下執行腳本,確認這個特定目錄使用的設定檔,全域設定允許你定義局部目錄設定檔中的CGI腳本的目錄 – 有些網站會停止他們的使用者變更這樣的設定。
  3. 檢查檔案系統頂層到腳本存在的目錄權限,Web伺服器使用者必須能夠讀及開啟/執行從頂層到腳本所有目錄。
  4. 確認你的腳本可以被Web伺服器使用者讀取跟執行。
  5. 確認腳本第一行參考的是Web伺服器可以執行的解譯器,像/usr/bin/env python對Web伺服器使用者來說可能沒有意義因為python程式不會在使用者的路徑上。

範例程式碼

下面的程式碼試著將使用者檢視的這一頁結合輸入的處理做簡單的網頁輸出,你可能希望根據下面提供的前兩行來選擇腳本真正的第一行 – 第一行可能只在Winodws上可運作,第二行可能只在UNIX-like系統上運作。

切換行號

   1 #!/usr/bin/env python
   2 
   3 import cgi
   4 import cgitb; cgitb.enable()  # for troubleshooting
   5 
   6 print "Content-type: text/html"
   7 print
   8 
   9 print """
  10 <html>
  11 
  12 <head><title>Sample CGI Script</title></head>
  13 
  14 <body>
  15 
  16   <h3> Sample CGI Script </h3>
  17 """
  18 
  19 form = cgi.FieldStorage()
  20 message = form.getvalue("message", "(no message)")
  21 
  22 print """
  23 
  24   <p>Previous message: %s</p>
  25 
  26   <p>form
  27 
  28   <form method="post" action="index.cgi">
  29     <p>message: <input type="text" name="message"/></p>
  30   </form>
  31 
  32 </body>
  33 
  34 </html>
  35 """ % message

另外參考


討論

  • 我們需要一個好的python CGI 架構 – Sridhar R
    • 雖然Nevow 跟 Wallaby 定義”架構”,你的意思是像Django-這樣的處理或只是較容易寫CGI應用程式那樣?


是的…

有很多Python網路應用程式TurboGears Django Zope ModPython Pso Aquarium Cheetah ++++++…等的架構。

但是假如python提供Session處理、JSON – 像XML-RPC標準環境 + WSGI 及未來的科技….這樣簡單的Web開發,那將更美好

-Vinoth vinoth.3v@gmail.com

很多共享主機不允許持續的處理,他們會刪除執行超過3分鐘的腳本,這個架構不能解釋那些只用cgi及ftp的人(或使生活較容易),你知道任何的方式可以使程式碼在這種環境下更簡單/更快嗎?Osvaldo

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *