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/,就可以看到結果了。