編寫Python CGI指令碼的教程

來源:互聯網
上載者:User
你是否想使用Python語言建立一個網頁,或者處理使用者從web表單輸入的資料?這些任務可以通過Python CGI(公用網關介面)指令碼以及一個Apache web伺服器實現。當使用者請求一個指定URL或者和網頁互動(比如點擊""提交"按鈕)的時候,CGI指令碼就會被web伺服器啟用。CGI指令碼調用執行完畢後,它的輸出結果就會被web伺服器用來建立顯示給使用者的網頁。
配置Apache web伺服器,讓其能運行CGI指令碼

在這個教程裡,我們假設Apache web伺服器已經安裝好,並已運行。這篇教程使用的Apache web伺服器(版本2.2.15,用於CentOS發行版6.5)運行在本地主機(127.0.0.1),並且監聽80連接埠,如下面的Apache指令指定一樣:

代碼如下:

ServerName 127.0.0.1:80
Listen 80

下面舉例中的HTML檔案存放在web伺服器上的/var/www/html目錄下,並通過DocumentRoot指令指定(指定網頁檔案所在目錄):

代碼如下:

DocumentRoot "/var/www/html"

現在嘗試請求URL:http://localhost/page1.html

這將返回web伺服器中下面檔案的內容:

代碼如下:

/var/www/html/page1.html

為了啟用CGI指令碼,我們必須指定CGI指令碼在web伺服器上的位置,需要用到ScriptAlias指令:

代碼如下:

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

以上指令表明CGI指令碼儲存在web伺服器的/var/www/cgi-bin目錄,請求URL裡包含/cgi-bin/的將會搜尋這個目錄下的CGI指令碼。

我們必須還要明確CGI指令碼在/var/www/cgi-bin目錄下有執行許可權,還要指定CGI指令碼的副檔名。使用下面的指令:

   Options +ExecCGI  AddHandler cgi-script .py 

下面訪問URL:http://localhost/cgi-bin/myscript-1.py

這將會調用web伺服器中下面所示指令碼:

代碼如下:

/var/www/cgi-bin/myscript-1.py

建立一個CGI指令碼

在建立一個Python CGI指令碼之前,你需要確認你已經安裝了Python(這通常是預設安裝的,但是安裝版本可能會有所不同)。本篇教程使用的指令碼是使用Python版本2.6.6編寫的。你可以通過下面任意一命令(-V和--version參數將顯示所安裝Python的版本號碼)檢查Python的版本。

 $ python -V $ python --version

如果你的Python CGI指令碼要用來處理使用者輸入的資料(從一個web輸入表單),那麼你將需要匯入Python cgi模組。這個模組可以處理使用者通過web輸入表單輸入的資料。你可以在你的指令碼中通過下面的語句匯入該指令碼:

 import cgi

你也必須修改Python CGI指令碼的執行許可權,以防止web伺服器不能調用。可以通過下面的命令增加執行許可權:

 # chmod o+x myscript-1.py

Python CGI例子

涉及到Python CGI指令碼的兩個方案將會在下面講述:

  • 使用Python指令碼建立一個網頁
  • 讀取並顯示使用者輸入的資料,並且在網頁上顯示結果

注意:Python cgi模組在方案2中是必需的,因為這涉及到使用者從web表單輸入資料。
例子1 :使用Python指令碼建立一個網頁

對於這個方案,我們將通過建立包含一個單一提交按鈕的網頁/var/www/html/page1.html開始。

  

Test Page 1

當"提交"按鈕被點擊,/var/www/cgi-bin/myscript-1.py指令碼將被調用(通過action參數指定)。通過設定方法參數為"get"來指定一個"GET"請求,伺服器將會返回指定的網頁。/var/www/html/page1.html在瀏覽器中的顯示情況如下:

/var/www/cgi-bin/myscript-1.py的內容如下:

 #!/usr/bin/python print "Content-Type: text/html" print "" print "" print "

CGI Script Output

" print "

This page was generated by a Python CGI script.

" print ""

第一行聲明表示這是使用 /usr/bin/python命令啟動並執行Python指令碼。"Content-Type: text/html"列印語句是必需的,這是為了讓web伺服器知道接受自CGI指令碼的輸出類型。其餘的語句用來輸出HTML格式的其餘網頁內容。

當"Submit"按鈕點擊,下面的網頁將返回:

這個例子的要點是你可以決定哪些資訊可以被CGI指令碼返回。這可能包括記錄檔的內容,當前登陸使用者的列表,或者今天的日期。在你處理時擁有所有python庫的可能性是無窮無盡的。
例子2:讀取並顯示使用者輸入的資料,並將結果顯示在網頁上

對於這個方案,我們將通過建立一個含有三個輸入欄位和一個提交按鈕的網頁/var/www/html/page2.html開始。

  

Test Page 2

當"Submit"按鈕點擊,/var/www/cgi-bin/myscript-2.py指令碼將被執行(通過action參數指定)。/var/www//html/page2.html顯示在web瀏覽器中的圖片如下所示(注意,三個輸入欄位已經被填寫好了):

/var/www/cgi-bin/myscript-2.py的內容如下:

 #!/usr/bin/python import cgi form = cgi.FieldStorage() print "Content-Type: text/html" print "" print "" print "

CGI Script Output

" print "

" print "The user entered data are:
" print "First Name: " + form["firstName"].value + "
" print "Last Name: " + form["lastName"].value + "
" print "Position: " + form["position"].value + "
" print "

" print ""

正如前面提到,import cgi語句用來確保能夠處理使用者通過web輸入表單輸入的資料。web輸入表單被封裝在一個表單對象中,叫做cgi.FieldStorage對象。一旦開始輸出,"Content-Type: text/html"是必需的,因為web伺服器需要知道接受自CGI指令碼的輸出格式。使用者輸入的資料在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的語句中可以得到。那些中括弧中的名稱和/var/www/html/page2.html文本輸入欄位中定義的名稱參數一致。

當網頁上的"Submit"按鈕被點擊,下面的網頁將被返回。

這個例子的要點就是你可以很容易地讀取並顯示使用者在web表單上輸入的資料。除了以字串的方式處理資料,你也可以用Python將使用者輸入的資料轉化為可用於數值計算的數字。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.