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