概述
WSGI接口包含兩方面:server/gateway 及 application/framework。
server調用由application提供的可調用對象。
另外在server和application之間還可能有一種稱作middleware的中間件。
可調用對象是指:函數、方法、類或者帶有callable方法的執行個體。
關于application
函數、方法、類及帶有callable方法的執行個體等可調用對象都可以作為the application object。
WSGI協定要求:
the application object接受兩個參數且可以被多次調用
這兩個參數分别為:
1.CGI式的字典;
2.回調函數:application用來向server傳遞http狀态碼/消息/http頭
另外協定要求可調用對象必須将響應體封裝成一個可疊代的strings傳回。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
關于server
從概述中可以知道,WSGI server必須要調用application,同時,從application的協定要求可知:
1. WSGI server必須向application提供環境參數,是以,自身也必須能夠擷取環境參數。
2. WSGI server接收application的傳回值作為響應體。
最簡單的WSGI server為Python自帶的wsgiref.simple_server
示例如下:
?
1 2 3 | |
關于middleware
middleware的概念沒有appllication和server那麼容易了解。
假設一個符合application标準的可調用對象,它接受可調用對象作為參數,傳回一個可調用對象的對象。
那麼對于server來說,它是一個符合标準的可調用對象,是以是application。
而對于application來說,它可以調用application,是以是server。
這樣的可調用對象稱為middleware。
middleware的概念非常接近decorator。
以一個路由的例子示例:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | |