發展背景
以前,如何選擇合適的Web應用程式框架成為困擾Python初學者的一個問題,這是因為,一般而言,Web套用框架的選擇將限制可用的
Web伺服器的選擇,反之亦然。那時的Python應用程式通常是為
CGI,
FastCGI,
mod_python中的一個而設計,甚至是為特定Web伺服器的自定義的API接口而設計的。
WSGI(有時發音作'wiz-gee')是作為Web伺服器與Web應用程式或套用框架之間的一種低級別的
接口,以提升可移植Web套用開發的共同點。WSGI是基於現存的
CGI標準而設計的。
規範概覽
WSGI區分為兩個部分:一為“
伺服器”或“網關”,另一為“應用程式”或“套用框架”。在處理一個WSGI請求時,伺服器會為應用程式提供環境信息及一個回調函式(Callback Function)。當應用程式完成處理請求後,通過前述的回調函式,將結果回傳給伺服器。
所謂的WSGI中間件同時實現了API的兩方,因此可以在WSGI伺服器和WSGI套用之間起調解作用:從Web伺服器的角度來說,中間件扮演應用程式,而從應用程式的角度來說,中間件扮演伺服器。“中間件”組件可以執行以下功能:
示例程式
def app(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield "Hello world!\n"
其中
第一行定義了一個名為app的callable,接受兩個參數,environ和start_response,environ是一個字典包含了CGI中的環境變數,start_response也是一個callable,接受兩個必須的參數,status(HTTP狀態)和response_headers(回響訊息的頭)。
第二行調用了start_response,狀態指定為“200 OK”,訊息頭指定為內容類型是“text/plain”。
第三行將回響訊息的訊息體返回。
網頁伺服器
雖然每個網頁伺服器程式有很多不同,但有一些共同的特點:每一個網頁伺服器程式都需要從網路接受
HTTP請求,然後提供HTTP回復給請求者。HTTP回復一般包含一個
HTML檔案,有時也可以包含純文本檔案、圖像或其他類型的檔案。
一般來說這些檔案都存儲在網頁伺服器的本地檔案系統里,而
URL和本地檔名都有一個階級組織結構的,伺服器會簡單的把URL對照到本地檔案系統中。當正確安裝和設定好網頁伺服器軟體,伺服器管理員會從伺服器軟體放置檔案的地方指定一個本地路徑名為根目錄。