淺析Python?WSGI的使用
第一次了解python的WSGI,可能描述的不太準(zhǔn)確。
本篇文章所依賴的python環(huán)境為:

什么是WSGI
WSGI也稱之為web服務(wù)器通用網(wǎng)關(guān)接口,全稱是web server gateway interface。它定義了在python中web服務(wù)器與web應(yīng)用程序之間應(yīng)該如何通信并且處理http請(qǐng)求和響應(yīng)的一個(gè)標(biāo)準(zhǔn),注意,它只是一個(gè)協(xié)議,或者說是規(guī)范、標(biāo)準(zhǔn),你也可以不按這個(gè)標(biāo)準(zhǔn)來,就像我們上一篇文章所寫的web服務(wù)器那樣。
WSGI 也分為應(yīng)用程序 和 服務(wù)器網(wǎng)關(guān), 其中我們熟知的Flask就是屬于應(yīng)用程序,uWSGI、wsgiref屬于服務(wù)器網(wǎng)關(guān)。
個(gè)人感覺,WSGI避免了造輪子,事情讓更擅長(zhǎng)的人去做,寫服務(wù)器的,那就寫符合WSGI規(guī)范的服務(wù)器就好,如果是寫應(yīng)用端的,就寫符合WSGI規(guī)范應(yīng)用就好。不用在重復(fù)的寫輪子。
除此之外,WSGI還能與傳統(tǒng)web服務(wù)器對(duì)接,例如: nginx、apache等進(jìn)行交互。

WSGI對(duì)應(yīng)用程序規(guī)定了什么
WSGI中規(guī)定了其應(yīng)用程序必須是一個(gè)可被調(diào)用的對(duì)象,通常來說,該對(duì)象是一個(gè)函數(shù)或者是一個(gè)類。 該對(duì)象必須接收2個(gè)參數(shù),分別是environ字典 和 start_response函數(shù),并且在對(duì)象結(jié)束前,應(yīng)該調(diào)用start_response函數(shù)。而函數(shù)應(yīng)該傳參status和headers,其中status應(yīng)該定義響應(yīng)狀態(tài)碼以及短語,headers應(yīng)該定義響應(yīng)頭。
如果用代碼來闡述的話,應(yīng)該是這樣來寫的:
def application(environ, start_response):
status = '200 OK'
headers = [('Content-type', 'text/plain')]
start_response(status, headers)
return [b'Hello, world!']
其中,application是一個(gè)可迭代的對(duì)象,接受了2個(gè)參數(shù),一個(gè)是environ,其類型是字典,還是一個(gè)是start_response,其類型是函數(shù),在application結(jié)束前,應(yīng)該調(diào)用start_response函數(shù),并且傳入status和headers值。
修改代碼寫出符合WSGI標(biāo)準(zhǔn)的web業(yè)務(wù)層
我們昨天寫的代碼,將返回一個(gè)Hello, Destined Person.,我們來看下,如果我們使用WSGI標(biāo)準(zhǔn)來寫業(yè)務(wù)層,我們應(yīng)該如何定義,并且如何調(diào)用WSGI服務(wù)器。
import wsgiref.simple_server
def application(environ,start_response):
status = "299 OK"
headers = [("Content-type","text/html"),("Server","pdudo_web_sites")]
start_response(status ,headers)
return [b'Hello, Destined person."]
s = wsgiref.simple_server.make_server('',8888,application)
s .serve_forever()上述,我們引入了一個(gè)符合WSGI的服務(wù)器: wsgiref.simple_server,我們僅需按照WSGI的標(biāo)準(zhǔn)來編寫業(yè)務(wù)層,也就是上述的application即可。我們?cè)诙x狀態(tài)碼的時(shí)候,估計(jì)將其設(shè)置為299 OK,在設(shè)置請(qǐng)求頭的時(shí)候,設(shè)置了一個(gè)Server為pdudo_web_sites。
我們使用curl請(qǐng)求一下服務(wù)器。

發(fā)現(xiàn),哦,只要按照WSGI規(guī)范來書寫,就可以很輕容的寫一個(gè)簡(jiǎn)單的服務(wù)器。
總結(jié)
本篇文章,介紹了什么是WSGI以及現(xiàn)在程序員寫python的web框架為什么要符合WSGI,最后我們寫了一個(gè)業(yè)務(wù)函數(shù),將其放到符合WSGI標(biāo)準(zhǔn)的服務(wù)器wsgiref上。文章寫的很亂,不是很好。
到此這篇關(guān)于淺析Python WSGI的使用的文章就介紹到這了,更多相關(guān)Python WSGI內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Pytorch中torch.nn.Softmax的dim參數(shù)用法說明
這篇文章主要介紹了Pytorch中torch.nn.Softmax的dim參數(shù)用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Python爬蟲運(yùn)用正則表達(dá)式的方法和優(yōu)缺點(diǎn)
這篇文章主要給大家介紹了關(guān)于Python爬蟲運(yùn)用正則表達(dá)式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
django filters實(shí)現(xiàn)數(shù)據(jù)過濾的示例代碼
這篇文章主要介紹了django filters實(shí)現(xiàn)數(shù)據(jù)過濾的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
python3個(gè)性簽名設(shè)計(jì)實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了python3個(gè)性簽名設(shè)計(jì)的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
pytorch和tensorflow計(jì)算Flops和params的詳細(xì)過程
這篇文章主要介紹了pytorch和tensorflow計(jì)算Flops和params,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

