WSGI簡介

客戶端發起了一條HTTP請求。。

服務器接受,解析,構造header,從web應用那裏拿HTML文檔,構造HTTP響應,發送響應。。

客戶端接受,抽取HTML文檔,顯示。完畢。


太麻煩了,這麼多的細節,在開發過程中,我們關注的只是HTTP請求以及對應的HTML文檔啊,當然是選擇把精力花在這裏啦。所以,抽象吧,把服務器與web應用的通信細節包裝起來,以後就可以不用去管他們啦!!

python中,這個抽象就是WSGI接口,即web server gateway interface. 官方解釋爲:Web服務器軟件和用Python編寫的Web應用程序之間的標準接口。【1】

嗯, 它長這個樣子:(對, 這個接口是一個可調用的對象,一個函數或類)

下面以函數爲例:

def hello_world_app(environ, start_response):
    status = '200 OK'  # HTTP Status
    headers = [('Content-type', 'text/plain; charset=utf-8')]  # HTTP Headers
    start_response(status, headers)

    # The returned object is going to be printed
    return [b"Hello World"]

好了,上面的environ就是關於HTTP請求信息的環境變量,dict對象。

           start_respond函數發送響應頭部,包括響應碼,顯然,其不可以單獨發送,必須等待程序處理HTML文檔之後才發送。關於具體的參數與使用見:https://www.python.org/dev/peps/pep-3333/#the-start-response-callable


等等,兩個參數由誰提供,還有,誰來調用?當然是服務器啦,看那個函數,其中web應用已經提供了HTML文檔了,就是b"Hello World",它又是一個接口,那差的肯定就是服務器啦。


給它一個 服務器環境,python標準庫的wsgiref,然後這樣做,

from wsgiref.simple_server import make_server

httpd = make_server('', 8000, hello_world_app)
print("Serving on port 8000...")

# Serve until process is killed
httpd.serve_forever()

運行,打開http://localhost:8000

一個小的web應用搞成了。就是說,接下來,我們僅需專注與那個接口對象就行了。

這就是wsgi簡單介紹。




參考:

使用Web框架 - 廖雪峯的官方網站

python文檔




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章