python cgi 編程


python默認自帶了幾個和web相關的模塊。原來只知道SimpleHTTPServer 這個模塊,后來又知道了 CGIHTTPServer 這個模塊

  • SimpleHTTPServer 
  • 1 python -m  SimpleHTTPServer 80 

    在命令行里鍵入上面的命令就有了一個簡單的HTTP服務器了,服務器的端口是 80 (也可以是別的,如果80端口被占用了)

   -m 的意思就是 module,web的根目錄是命令行的當前目錄  (win7 下 在一個文件夾空白的地方 shift+鼠標右鍵  會出現在此處打開命令行,再輸入上面的例子就可以把當前目錄作為web的根目錄)

    打開瀏覽器,輸入 http://localhost:80 即可看到文件夾下的目錄和文件。

  1.     在忘記帶u盤時,可以簡單的做一個文件共享。
  2.            多看系統的wifi傳書應該也是這個原理。
  3.            還可以簡單的測試一下網頁是否正常
  4.            如果文件夾下有index.html 就會自動打開作為首頁
  • CGIHTTPServer
  • 1 python -m CGIHTTPServer 80 

    命令的解釋和上面差不多,這次啟動的是CGI (Common Gateway Interface)服務器,CGI 程序可以用任何腳本語言或者是完全獨立編程語言實現,只要這個語言可以在這個系統上運行。

       CGI架構

          用上面的命令啟動的 CGI服務器,web的根目錄還是命令行的當前目錄。但是如果直接把cgi的腳本放在當前目錄下面是不能執行的,必須新建一個文件夾叫做cgi-bin,把腳本都放在這個目錄下才能執行

    通俗的來說就是通過web去調用一個本地的程序,然后再把結果輸出到web,就是這樣一個交互的過程。有關python的CGI編程可以參考這個網站:http://www.w3cschool.cc/python/python-cgi.html上面的代碼有好多是不能直接運行的,需要修改

     下面給出一個例子:

   起源:亞馬遜的商品的圖片的大小、旋轉都是url query里面的參數控制的  可以看這個網址http://aaugh.com/imageabuse.html

   現在我們要模擬下那個大小的參數

  

 1 #coding:utf-8
 2 import cv,cv2
 3 import cgi,cgitb
 4 
 5 form = cgi.FieldStorage()
 6 size = form.getvalue('s')
 7 
 8 print "Content-Type:image/jpeg\r\n",
 9 print    #必須有  header的格式
10 
11 if size in ['big','small']:
12     img = cv2.imread('cgi-bin/1.jpg')
13     if size == 'big':
14         resized = cv2.resize(img,(img.shape[1]*2,img.shape[0]*2))
15     elif size == 'small':
16         resized = cv2.resize(img,(img.shape[1]/2,img.shape[0]/2))        
17     cv2.imwrite("cgi-bin/resized.jpg",resized)
18     f = open('cgi-bin/resized.jpg','rb')
19     print f.read(-1)
20     f.close()
21 else:
22     f = open('cgi-bin/1.jpg','rb')
23     print f.read(-1)
24     f.close()
View Code

    訪問的url應該是這樣的  http://localhost/cgi-bin/img.py?s=small    s是size的一個標志,有big和small兩個參數,默認的我們返回原始大小的圖像。代碼中使用到了opencv來進行resize到兩倍或者縮小一倍。當然實際應用中可能更加復雜。

    前面的一段代碼是輸出http的header,http的header 里面的換行都是\r\n header結束的標志就是有兩個連續的\r\n 

總結:

  上面只是python內置的幾個簡單的webserver,功能肯定比Apache什么的少了不少,但是偶爾測試一下還是可以的,不用裝那么大的軟件。

如果要深入學習web的還是要找一些框架,像是 Django、Tornado等。

 

使用Python開發Web,最簡單,原始和直接的辦法是使用CGI標准,在1998年這種方式很流行。 現在從應用角度解釋它是如何工作: 首先做一個Python腳本,輸出HTML代碼,然后保存成.cgi擴展名的文件,通過瀏覽器訪問此文件。 就是這樣。

盡管實現很簡單,還是暴露了一些問題和不便的地方。 問你自己這幾個問題:

  • 應用中有多處需要連接數據庫會怎樣呢? 每個獨立的CGI腳本,不應該重復寫數據庫連接的代碼。 比較實用的辦法是寫一個共享函數,可被多個代碼調用。

  • 一個開發人員 確實 需要去關注如何輸出Content-Type以及完成所有操作后去關閉數據 庫么? 此類問題只會降低開發人員的工作效率,增加犯錯誤的幾率。 那些初始化和釋放 相關的工作應該交給一些通用的框架來完成。

  • 如果這樣的代碼被重用到一個復合的環境中會發生什么? 每個頁面都分別對應獨立的數據庫和密碼嗎?

  • 如果一個Web設計師,完全沒有Python開發經驗,但是又需要重新設計頁面的話,又將 發生什么呢? 一個字符寫錯了,可能導致整個應用崩潰。 理想的情況是,頁面顯示的邏輯與從數據庫中讀取書本記錄分隔開,這樣 Web設計師的重新設計不會影響到之前的業務邏輯。

以上正是Web框架致力於解決的問題。 Web框架為應用程序提供了一套程序框架, 這樣你可以專注於編寫清晰、易維護的代碼,而無需從頭做起。 簡單來說,這就是Django所能做的。

                                                                                -------------------The Django Book 2.0--中文版

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM