搜尋
首頁後端開發Python教學分享一個PythonCGI程式設計的實例教程

最近一週的時間在網路上繼續學習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 &#39;<html>&#39;print &#39;<head>&#39;print &#39;<title>Hello Word - First CGI Program</title>&#39;print &#39;</head>&#39;print &#39;<body>&#39;print &#39;<h2 id="Hello-nbsp-Word-nbsp-This-nbsp-is-nbsp-my-nbsp-first-nbsp-CGI-nbsp-program">Hello Word! This is my first CGI program</h2>&#39;print &#39;</body>&#39;print &#39;</html>&#39;

第一行的內容指定了腳本解釋器的位置,可以根據自己安裝的路徑變更

然後在瀏覽器網址列輸入: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(&#39;first_name&#39;)last_name  = form.getvalue(&#39;last_name&#39;)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 id="Hello-nbsp-s-nbsp-s">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行引号里的内容也改成自己的cgi-bin所在的路径

保存之后重启服务器即可

【相关推荐】

1. 详解cgi向文本或者数据库写入数据实例代码

2. 分享在IIS上用CGI方式运行Python脚本的实例教程

3. 使用CGI模块建立简单web页面教程实例

4. 什么是CGI?详细介绍Python CGI编程

5. 详解XML与现代CGI应用程序的示例代码

6. FastCGI 进程意外退出造成500错误

以上是分享一個PythonCGI程式設計的實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在Python數組中存儲哪些數據類型?可以在Python數組中存儲哪些數據類型?Apr 27, 2025 am 12:11 AM

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?如果您嘗試將錯誤的數據類型的值存儲在Python數組中,該怎麼辦?Apr 27, 2025 am 12:10 AM

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

Python標準庫的哪一部分是:列表或數組?Python標準庫的哪一部分是:列表或數組?Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

您應該檢查腳本是否使用錯誤的Python版本執行?您應該檢查腳本是否使用錯誤的Python版本執行?Apr 27, 2025 am 12:01 AM

ThescriptisrunningwiththewrongPythonversionduetoincorrectdefaultinterpretersettings.Tofixthis:1)CheckthedefaultPythonversionusingpython--versionorpython3--version.2)Usevirtualenvironmentsbycreatingonewithpython3.9-mvenvmyenv,activatingit,andverifying

在Python陣列上可以執行哪些常見操作?在Python陣列上可以執行哪些常見操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些類型的應用程序中,Numpy數組常用?在哪些類型的應用程序中,Numpy數組常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什麼時候選擇在Python中的列表上使用數組?您什麼時候選擇在Python中的列表上使用數組?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomoGeneData,performance-Caliticalcode,orinterfacingwithccode.1)同質性data:arraysSaveMemorywithTypedElements.2)績效code-performance-calitialcode-calliginal-clitical-clitical-calligation-Critical-Code:Arraysofferferbetterperbetterperperformanceformanceformancefornallancefornalumericalical.3)

所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactsperformance.2)listssdonotguaranteeconecontanttanttanttanttanttanttanttanttanttimecomplecomecomplecomecomecomecomecomecomplecomectacccesslectaccesslecrectaccesslerikearraysodo。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能