歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

如何創建和使用Python CGI腳本

你是否想使用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指令指定一樣:

  1. ServerName127.0.0.1:80
  2. Listen80

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

  1. DocumentRoot"/var/www/html"

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

這將返回web服務器中下面文件的內容:

  1. /var/www/html/page1.html

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

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

以上指令表明CGI腳本保存在web服務器的/var/www/cgi-bin目錄,請求URL裡包含/cgi-bin/的將會搜索這個目錄下的CGI腳本。

我們必須還要明確CGI腳本在/var/www/cgi-bin目錄下有執行權限,還要指定CGI腳本的文件擴展名。使用下面的指令:

  1. <Directory"/var/www/cgi-bin">
  2. Options +ExecCGI
  3. AddHandler cgi-script .py
  4. </Directory>

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

這將會調用web服務器中下面所示腳本:

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

創建一個CGI腳本

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

  1. $ python -V
  2. $ python --version

如果你的Python CGI腳本要用來處理用戶輸入的數據(從一個web輸入表單),那麼你將需要導入Python cgi模塊。這個模塊可以處理用戶通過web輸入表單輸入的數據。你可以在你的腳本中通過下面的語句導入該腳本:

  1. import cgi

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

  1. # chmod o+x myscript-1.py

Python CGI例子

涉及到Python CGI腳本的兩個方案將會在下面講述:

  • 使用Python腳本創建一個網頁
  • 讀取並顯示用戶輸入的數據,並且在網頁上顯示結果

注意:Python cgi模塊在方案2中是必需的,因為這涉及到用戶從web表單輸入數據。

例子1 :使用Python腳本創建一個網頁

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

  1. <html>
  2. <h1>Test Page 1</h1>
  3. <formname="input"action="/cgi-bin/myscript-1.py"method="get">
  4. <inputtype="submit"value="Submit">
  5. </form>
  6. </html>

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

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

  1. #!/usr/bin/python
  2. print"Content-Type: text/html"
  3. print""
  4. print"<html>"
  5. print"<h2>CGI Script Output</h2>"
  6. print"<p>This page was generated by a Python CGI script.</p>"
  7. print"</html>"

第一行聲明表示這是使用 /usr/bin/python命令運行的Python腳本。"Content-Type: text/html"打印語句是必需的,這是為了讓web服務器知道接受自CGI腳本的輸出類型。其余的語句用來輸出HTML格式的其余網頁內容。

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

這個例子的要點是你可以決定哪些信息可以被CGI腳本返回。這可能包括日志文件的內容,當前登陸用戶的列表,或者今天的日期。在你處理時擁有所有python庫的可能性是無窮無盡的。

例子2:讀取並顯示用戶輸入的數據,並將結果顯示在網頁上

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

  1. <html>
  2. <h1>Test Page 2</h1>
  3. <formname="input"action="/cgi-bin/myscript-2.py"method="get">
  4. First Name: <inputtype="text"name="firstName"><br>
  5. Last Name: <inputtype="text"name="lastName"><br>
  6. Position: <inputtype="text"name="position"><br>
  7. <inputtype="submit"value="Submit">
  8. </form>
  9. </html>

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

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

  1. #!/usr/bin/python
  2. import cgi
  3. form = cgi.FieldStorage()
  4. print"Content-Type: text/html"
  5. print""
  6. print"<html>"
  7. print"<h2>CGI Script Output</h2>"
  8. print"<p>"
  9. print"The user entered data are:<br>"
  10. print"<b>First Name:</b> "+ form["firstName"].value +"<br>"
  11. print"<b>Last Name:</b> "+ form["lastName"].value +"<br>"
  12. print"<b>Position:</b> "+ form["position"].value +"<br>"
  13. print"</p>"
  14. print"</html>"

正如前面提到,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將用戶輸入的數據轉化為可用於數值計算的數字。

結論

本教程演示了如何使用Python CGI腳本創建網頁並處理用戶在網頁表單輸入的數據。查閱更多關於Apache CGI腳本的信息,點擊這裡。查閱更多關於Python cgi模塊的信息,點擊這裡。

Python向PHP發起GET與POST請求 http://www.linuxidc.com/Linux/2014-10/107903.htm

《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的詳細介紹:請點這裡
Python 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved