分享一個PythonCGI編程的執行個體教程

來源:互聯網
上載者:User
最近一周的時間在網上繼續學習Python,接觸到了Python的CGI編程,CGI的官方定義如下:

CGI(Common Gateway Interface),通用閘道介面,它是一段程式,運行在伺服器上如:HTTP伺服器,提供同用戶端HTML頁面的介面。

我比較感興趣的是Python CGI能寫出多厲害的應用程式,所以我就直接開始學習了Python的編程部分,首先要配置Web伺服器支援CGI,我電腦上已經裝好了wamp整合式開發環境,所以就不用裝Apache了,網上有很多博文都是講的如何在Apache下配置,而且是Linux環境下的,不過我想設定檔內容應該不會有很大變化,於是我就開始了我的鼓搗之旅。事實證明用windows來做開發真的是個坑。

根據線上學習網站Python CGI的說法,要先設定好CGI目錄,在Apache的設定檔中修改httpd.conf

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

再修改httpd.conf檔案如下:

<Directory "/var/www/cgi-bin">   AllowOverride None   Options +ExecCGI   Order allow,deny   Allow from all</Directory>

然後在AddHandler 中添加 .py 尾碼,這樣我們就可以訪問 .py 結尾的 python 指令檔:

做完這一切之後重新啟動伺服器(Apache/Wamp),編寫第一個CGI程式,代碼如下:

test1.py

#!D:\Python27\python # -*- coding: UTF-8 -*-print "Content-type:text/html\r\n\r\n"print '<html>'print '<head>'print '<title>Hello Word - First CGI Program</title>'print '</head>'print '<body>'print '<h2>Hello Word! This is my first CGI program</h2>'print '</body>'print '</html>'

第一行的內容指定了指令碼解譯器的位置,可以根據自己安裝的路徑更改

然後在瀏覽器地址欄輸入:http://localhost/cgi-bin/test1.py

然後瀏覽器訪問顯示結果如下:

Hello Word! This is my first CGI program

沒有什麼問題

然後編寫第二個程式:hello_get.py

#!D:\Python27\python# -*- coding: UTF-8 -*-# CGI處理模組import cgi, cgitb # 建立 FieldStorage 的執行個體化form = cgi.FieldStorage() # 擷取資料first_name = form.getvalue('first_name')last_name  = form.getvalue('last_name')print "Content-type:text/html\r\n\r\n"print "<html>"print "<head>"print "<title>Hello - Second CGI Program</title>"print "</head>"print "<body>"print "<h2>Hello %s %s</h2>" % (first_name, last_name)print "</body>"print "</html>"

在瀏覽器輸入localhost/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

然而並沒有像網站上說的那樣輸出

Hello ZARA ALI

而是出現了以下的錯誤提示


於是我就納悶了,配置環境一樣,代碼都是一模一樣,到底是哪裡出問題了呢,然後我就百度Windows下Apache CGI配置方法,然而出來的都是Linux下的配置方法,於是沒辦法,我選擇了重裝wamp然後重新設定CGI環境,然後我依次將上面的每一步又都做了一遍,然後將網站上的代碼複製到編輯器然後再次在瀏覽器中輸入:

http://localhost/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALI

結果仍然是上面那一串錯誤提示,於是我仔細看了一下這個提示,大致意思就是:

伺服器內部錯誤

伺服器發生了一個內部錯誤或者由於錯誤配置從而無法完成我的請求

請郵件聯絡伺服器管理員告知這個錯誤以及出現這個錯誤之前你做了什麼操作

想瞭解更多資訊請查閱伺服器錯誤日誌

因為這個於是我堅定不移地相信是因為我把伺服器配置錯了,正當我一籌莫展的時候,我突然想到,我之前沒有修改任何設定檔時,第一個程式test1都能正確運行,會不會這個錯誤與設定檔無關呢,於是我試著把test1的第一行聲明解譯器路徑的那一條語句去掉了,再次運行,瀏覽器中出現了同樣的錯誤


所以我大感欣慰,因為這證實了我的猜想,和伺服器的配置沒有關係,是因為我的指令檔有錯,所以伺服器無法回應請求,既然如此,那hello_get.py的錯誤也同樣如此了,那麼問題就簡單多了,只要檢查代碼有沒有寫錯的地方就行了。

這裡我要反思自己的一個陋習:當我嘗試著運行網站上的一個常式的時候,我總是一個ctrl C然後ctrl V複製粘貼到自己的編輯器中,簡單一點的程式還好,複雜一點的,代碼塊很多的程式,這樣的習慣帶來的後果就是:縮排格式不正確,然後運行錯誤,這個問題在Python中體現得尤其明顯,因為Python對縮排要求真的非常嚴格,所以千萬不能複製粘貼Python程式到自己的程式中,一定要一個代碼一個代碼的敲,確保縮排在自己的控制之下。

我說到這裡明白人已經看出我hello_get.py檔案的錯誤之處在哪裡了——就是沒有自己動手敲,其實我之前也試過在網上copy C語言代碼到VC++6.0裡面,表面看上去文法完全正確,但是下面總有一個錯誤,提示也是看不懂的,所以在遇到這種情況的時候我才能想到可能是這個原因。這也警示大家,代碼一定要自己動手一個字母一個符號地敲進你的程式當中,否則就會出現難以發覺的錯誤。

最後說說如何正確配置Windows下的wamp(Apache)才能正確執行CGI指令碼,步驟很簡單:

開啟httpd.conf

將371行的

ScriptAlias /cgi-bin/ "D:/wamp/bin/apache/apache2.4.9/cgi-bin/"前面的#號去掉,就是解除注釋,將後面引號裡的D:/wamp/bin/apache/apache2.4.9/cgi-bin/改成自己的cgi-bin所在的路徑

將387行<Directory "D:/wamp/bin/apache/apache2.4.9/cgi-bin">引號裡的內容也改成自己的cgi-bin所在的路徑

儲存之後重啟伺服器即可

【相關推薦】

1. 詳解cgi向文本或者資料庫寫入資料執行個體代碼

2. 分享在IIS上用CGI方式運行Python指令碼的執行個體教程

3. 使用CGI模組建立簡單web頁面教程執行個體

4. 什麼是CGI?詳細介紹Python CGI編程

5. 詳解XML與現代CGI應用程式的範例程式碼

6. FastCGI 進程意外退出造成500錯誤

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.