標籤:python cgi 初學坑
這兩天學了python cgi編程,挺好玩的 跟大家分享一下:
目標:
建立一個cgi指令碼 接收來訪者的參數
步驟:
建立一個cgi服務的根目錄(隨便建立,然後在終端或者cmd下切換到該目錄下)
python2.x的httpserver啟動:python -m CGIHTTPServer 13333 會啟動http server 在13333連接埠上
python3.x的httpserver啟動:python -m http.server --cgi 13333 這個--cgi不可以拿掉 否則cgi指令碼運行不了
然後這個時候 你就可以建立一個比如index.html 測試一下 訪問了
接下來 建立cgi-bin 目錄 在目前的目錄下(目錄名必須是這個,cgi指令碼就放在這個目錄下),此時相對於http服務來說 根目錄還是上一層的目錄
可以建立一個index.py在cgi-bin下,內容:
#!/usr/bin/env pythonimport cgi #內建模組html=‘‘‘<html> <head> </head> <body> <form method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type="submit" name="return"> </form> <b>My name is %s , I‘m %s years old .</b> </body></html>‘‘‘print("Content-Type:text/html") #headerprint() #聲明header結束f=cgi.FieldStorage() #cgi的一個類 用來接收參數的try: print(html%(f[‘name‘].value,f["age"].value))except: print(html%(‘\t‘,‘\t‘))
效果會在你訪問的時候出現兩個文字框:
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/89/F4/wKioL1gi10jz471XAAAzQU8Undc097.png-wh_500x0-wm_3-wmp_4-s_3850704049.png" title="9~HD[KF`Y`E$2H)N$37]6DO.png " alt="wKioL1gi10jz471XAAAzQU8Undc097.png-wh_50" />
有幾個坑:一個是python的cgi模組的啟動位置 一定要是在cgi-bin的上層目錄下;
其次是index.py一定是在cgi-bin下才行 而且許可權不足的話會報錯;三是在執行個體化cgi的fieldstorage類的時候,注意別聲明多次,比如我在上邊的代碼的try那裡才去執行個體化,類似這樣:
try :
print(html%(cgi.FieldStorage["name"].value,cgi.FieldStorage["age"].value)
except......
這樣寫的結果會什麼都不顯示 因為第一次執行個體化會傳遞資料 但是第二次的時候沒有提交的結果了,所以會有可能神馬都不顯示或者只顯示一個;
最後就是注意這個:
print("Content-Type:text/html")
print()
這個一定要寫上,這個是聲明頭部和頭部結束的,不寫有問題;暫時我也就總結這麼多~
跟我一起來一句英文吧:
It always seems impossible until its done
成功之前,一切看起來都是不可能的
本文出自 “扛著一把鍬,專填各種坑” 部落格,請務必保留此出處http://forthedream.blog.51cto.com/11242688/1871140
學習python cgi的一點心得體會