編寫Python CGI腳本的教程
你是否想使用Python語言創(chuàng)建一個網(wǎng)頁,或者處理用戶從web表單輸入的數(shù)據(jù)?這些任務(wù)可以通過Python CGI(公用網(wǎng)關(guān)接口)腳本以及一個Apache web服務(wù)器實現(xiàn)。當(dāng)用戶請求一個指定URL或者和網(wǎng)頁交互(比如點擊""提交"按鈕)的時候,CGI腳本就會被web服務(wù)器啟用。CGI腳本調(diào)用執(zhí)行完畢后,它的輸出結(jié)果就會被web服務(wù)器用來創(chuàng)建顯示給用戶的網(wǎng)頁。
配置Apache web服務(wù)器,讓其能運行CGI腳本
在這個教程里,我們假設(shè)Apache web服務(wù)器已經(jīng)安裝好,并已運行。這篇教程使用的Apache web服務(wù)器(版本2.2.15,用于CentOS發(fā)行版6.5)運行在本地主機(jī)(127.0.0.1),并且監(jiān)聽80端口,如下面的Apache指令指定一樣:
Listen 80
下面舉例中的HTML文件存放在web服務(wù)器上的/var/www/html目錄下,并通過DocumentRoot指令指定(指定網(wǎng)頁文件所在目錄):
現(xiàn)在嘗試請求URL:http://localhost/page1.html
這將返回web服務(wù)器中下面文件的內(nèi)容:
為了啟用CGI腳本,我們必須指定CGI腳本在web服務(wù)器上的位置,需要用到ScriptAlias指令:
以上指令表明CGI腳本保存在web服務(wù)器的/var/www/cgi-bin目錄,請求URL里包含/cgi-bin/的將會搜索這個目錄下的CGI腳本。
我們必須還要明確CGI腳本在/var/www/cgi-bin目錄下有執(zhí)行權(quán)限,還要指定CGI腳本的文件擴(kuò)展名。使用下面的指令:
<Directory "/var/www/cgi-bin"> Options +ExecCGI AddHandler cgi-script .py </Directory>
下面訪問URL:http://localhost/cgi-bin/myscript-1.py
這將會調(diào)用web服務(wù)器中下面所示腳本:
創(chuàng)建一個CGI腳本
在創(chuàng)建一個Python CGI腳本之前,你需要確認(rèn)你已經(jīng)安裝了Python(這通常是默認(rèn)安裝的,但是安裝版本可能會有所不同)。本篇教程使用的腳本是使用Python版本2.6.6編寫的。你可以通過下面任意一命令(-V和--version參數(shù)將顯示所安裝Python的版本號)檢查Python的版本。
$ python -V $ python --version
如果你的Python CGI腳本要用來處理用戶輸入的數(shù)據(jù)(從一個web輸入表單),那么你將需要導(dǎo)入Python cgi模塊。這個模塊可以處理用戶通過web輸入表單輸入的數(shù)據(jù)。你可以在你的腳本中通過下面的語句導(dǎo)入該腳本:
import cgi
你也必須修改Python CGI腳本的執(zhí)行權(quán)限,以防止web服務(wù)器不能調(diào)用。可以通過下面的命令增加執(zhí)行權(quán)限:
# chmod o+x myscript-1.py
Python CGI例子
涉及到Python CGI腳本的兩個方案將會在下面講述:
- 使用Python腳本創(chuàng)建一個網(wǎng)頁
- 讀取并顯示用戶輸入的數(shù)據(jù),并且在網(wǎng)頁上顯示結(jié)果
注意:Python cgi模塊在方案2中是必需的,因為這涉及到用戶從web表單輸入數(shù)據(jù)。
例子1 :使用Python腳本創(chuàng)建一個網(wǎng)頁
對于這個方案,我們將通過創(chuàng)建包含一個單一提交按鈕的網(wǎng)頁/var/www/html/page1.html開始。
<html> <h1>Test Page 1</h1> <form name="input" action="/cgi-bin/myscript-1.py" method="get"> <input type="submit" value="Submit"> </form> </html>
當(dāng)"提交"按鈕被點擊,/var/www/cgi-bin/myscript-1.py腳本將被調(diào)用(通過action參數(shù)指定)。通過設(shè)置方法參數(shù)為"get"來指定一個"GET"請求,服務(wù)器將會返回指定的網(wǎng)頁。/var/www/html/page1.html在瀏覽器中的顯示情況如下:
/var/www/cgi-bin/myscript-1.py的內(nèi)容如下:
#!/usr/bin/python print "Content-Type: text/html" print "" print "<html>" print "<h2>CGI Script Output</h2>" print "<p>This page was generated by a Python CGI script.</p>" print "</html>"
第一行聲明表示這是使用 /usr/bin/python命令運行的Python腳本。"Content-Type: text/html"打印語句是必需的,這是為了讓web服務(wù)器知道接受自CGI腳本的輸出類型。其余的語句用來輸出HTML格式的其余網(wǎng)頁內(nèi)容。
當(dāng)"Submit"按鈕點擊,下面的網(wǎng)頁將返回:
這個例子的要點是你可以決定哪些信息可以被CGI腳本返回。這可能包括日志文件的內(nèi)容,當(dāng)前登陸用戶的列表,或者今天的日期。在你處理時擁有所有python庫的可能性是無窮無盡的。
例子2:讀取并顯示用戶輸入的數(shù)據(jù),并將結(jié)果顯示在網(wǎng)頁上
對于這個方案,我們將通過創(chuàng)建一個含有三個輸入域和一個提交按鈕的網(wǎng)頁/var/www/html/page2.html開始。
<html> <h1>Test Page 2</h1> <form name="input" action="/cgi-bin/myscript-2.py" method="get"> First Name: <input type="text" name="firstName"><br> Last Name: <input type="text" name="lastName"><br> Position: <input type="text" name="position"><br> <input type="submit" value="Submit"> </form> </html>
當(dāng)"Submit"按鈕點擊,/var/www/cgi-bin/myscript-2.py腳本將被執(zhí)行(通過action參數(shù)指定)。/var/www//html/page2.html顯示在web瀏覽器中的圖片如下所示(注意,三個輸入域已經(jīng)被填寫好了):
/var/www/cgi-bin/myscript-2.py的內(nèi)容如下:
#!/usr/bin/python import cgi form = cgi.FieldStorage() print "Content-Type: text/html" print "" print "<html>" print "<h2>CGI Script Output</h2>" print "<p>" print "The user entered data are:<br>" print "<b>First Name:</b> " + form["firstName"].value + "<br>" print "<b>Last Name:</b> " + form["lastName"].value + "<br>" print "<b>Position:</b> " + form["position"].value + "<br>" print "</p>" print "</html>"
正如前面提到,import cgi語句用來確保能夠處理用戶通過web輸入表單輸入的數(shù)據(jù)。web輸入表單被封裝在一個表單對象中,叫做cgi.FieldStorage對象。一旦開始輸出,"Content-Type: text/html"是必需的,因為web服務(wù)器需要知道接受自CGI腳本的輸出格式。用戶輸入的數(shù)據(jù)在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的語句中可以得到。那些中括號中的名稱和/var/www/html/page2.html文本輸入域中定義的名稱參數(shù)一致。
當(dāng)網(wǎng)頁上的"Submit"按鈕被點擊,下面的網(wǎng)頁將被返回。
這個例子的要點就是你可以很容易地讀取并顯示用戶在web表單上輸入的數(shù)據(jù)。除了以字符串的方式處理數(shù)據(jù),你也可以用Python將用戶輸入的數(shù)據(jù)轉(zhuǎn)化為可用于數(shù)值計算的數(shù)字。
相關(guān)文章
python itchat實現(xiàn)微信自動回復(fù)的示例代碼
本篇文章主要介紹了python itchat實現(xiàn)微信自動回復(fù)的示例代碼,可以實現(xiàn)微信自動回復(fù),有興趣的可以了解一下2017-08-08Python實現(xiàn)多項式擬合正弦函數(shù)詳情
這篇文章主要介紹了Python實現(xiàn)多項式擬合正弦函數(shù)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08python安裝virtualenv虛擬環(huán)境步驟圖文詳解
這篇文章主要介紹了python安裝virtualenv虛擬環(huán)境步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09Python數(shù)據(jù)可視化之Matplotlib初級使用指南
Matplotlib是Python中最常用的數(shù)據(jù)可視化庫之一,它提供了豐富的圖表類型和靈活的自定義選項,能幫助我們以更直觀的方式理解數(shù)據(jù),本文將對Matplotlib的基本功能進(jìn)行介紹,包括如何創(chuàng)建和自定義圖表等2023-07-07python實現(xiàn)異步回調(diào)機(jī)制代碼分享
本文介紹了python實現(xiàn)異步回調(diào)機(jī)制的功能,大家參考使用吧2014-01-01