1. 程式人生 > >python WSGI框架詳解

python WSGI框架詳解

1.web應用的本質
1)瀏覽器傳送一個HTTP請求
2)伺服器收到請求,生成一個HTML文件
3)伺服器把HTML文件作為HTTP響應的body發個瀏覽器
4)瀏覽器收到HTTP響應,從HTTP Body取出HTML文件並顯示

2.什麼是WSGI,為什麼需要WSGI
上面的web應用過程,如果由我們自己來實現是複雜的,接收HTTP請求,解析HTTP請求,響應HTTP請求等。
通常這些操作都由WSGI伺服器來完成,WSGI(Web Server Gateway Interface)定義了WSGI伺服器執行的介面,我們只需要編寫服務WSGI規範的介面,然後由WSGI伺服器來執行,就可以了。

3.WSGI介面編寫示例

def application(environ,satrt_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return '<h1>Hello,web!</h1>'

上面的application()函式就是符合WSGI標準的一個HTTP處理函式
引數說明:
environ:包含HTTP請求資訊的dict物件
satrt_response:傳送HTTP響應的函式
函式說明:
start_response('200 OK', [('Content-Type', 'text/html')])
傳送HTTP響應的Header,Header只能傳送一次,意思是start_response函式只能執行一次
'200 OK'是HTTP響應碼引數,[('Content-Type', 'text/html')]表示HTTP Header

函式的返回值return '<h1>Hello,web!</h1>'作為HTTP響應body傳送給伺服器。

接收HTTP請求,解析HTTP請求,傳送HTTP請求等操作就交由WSGI伺服器去完成,WSGI介面只負責業務邏輯。

4.python WSGI伺服器
python內建了一個WSGI伺服器,這個模組叫做wsgiref,不過這個模組沒有考慮執行效率,只是為了開發和測試使用。

5.python編寫執行WSGI web應用示例
1)編寫WSGI介面

def application(environ,satrt_response):
    start_response('200 OK',[('Content-Type','text/html')])
    return '<h1>Hello,web!</h1>'

2)編寫server.py,啟動初始化WSGI伺服器,載入application()函式

複製程式碼
# server.py
# 從wsgiref模組匯入:
from wsgiref.simple_server import make_server
# 匯入我們自己編寫的application函式:
from hello import application

# 建立一個伺服器,IP地址為空,埠是8000,處理函式是application:
httpd = make_server('', 8000, application)
print "Serving HTTP on port 8000..."
# 開始監聽HTTP請求:
httpd.serve_forever()
複製程式碼

執行:python server.py
開啟瀏覽器,輸入http://localhost:8000/,就可以看到結果了。