淺析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
請求和響應(yīng)的一個標(biāo)準(zhǔn),注意,它只是一個協(xié)議,或者說是規(guī)范、標(biāo)準(zhǔn),你也可以不按這個標(biāo)準(zhǔn)來,就像我們上一篇文章所寫的web
服務(wù)器那樣。
WSGI
也分為應(yīng)用程序 和 服務(wù)器網(wǎng)關(guān), 其中我們熟知的Flask
就是屬于應(yīng)用程序,uWSGI
、wsgiref
屬于服務(wù)器網(wǎng)關(guān)。
個人感覺,WSGI
避免了造輪子,事情讓更擅長的人去做,寫服務(wù)器的,那就寫符合WSGI
規(guī)范的服務(wù)器就好,如果是寫應(yīng)用端的,就寫符合WSGI
規(guī)范應(yīng)用就好。不用在重復(fù)的寫輪子。
除此之外,WSGI
還能與傳統(tǒng)web
服務(wù)器對接,例如: nginx
、apache
等進(jìn)行交互。
WSGI對應(yīng)用程序規(guī)定了什么
WSGI
中規(guī)定了其應(yīng)用程序必須是一個可被調(diào)用的對象,通常來說,該對象是一個函數(shù)或者是一個類。 該對象必須接收2個參數(shù),分別是environ
字典 和 start_response
函數(shù),并且在對象結(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
是一個可迭代的對象,接受了2個參數(shù),一個是environ
,其類型是字典,還是一個是start_response
,其類型是函數(shù),在application
結(jié)束前,應(yīng)該調(diào)用start_response
函數(shù),并且傳入status
和headers
值。
修改代碼寫出符合WSGI標(biāo)準(zhǔn)的web業(yè)務(wù)層
我們昨天寫的代碼,將返回一個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()
上述,我們引入了一個符合WSGI
的服務(wù)器: wsgiref.simple_server
,我們僅需按照WSGI
的標(biāo)準(zhǔn)來編寫業(yè)務(wù)層,也就是上述的application
即可。我們在定義狀態(tài)碼的時候,估計將其設(shè)置為299 OK
,在設(shè)置請求頭的時候,設(shè)置了一個Server
為pdudo_web_sites
。
我們使用curl
請求一下服務(wù)器。
發(fā)現(xiàn),哦,只要按照WSGI
規(guī)范來書寫,就可以很輕容的寫一個簡單的服務(wù)器。
總結(jié)
本篇文章,介紹了什么是WSGI
以及現(xiàn)在程序員寫python
的web
框架為什么要符合WSGI
,最后我們寫了一個業(yè)務(wù)函數(shù),將其放到符合WSGI
標(biāo)準(zhǔn)的服務(wù)器wsgiref
上。文章寫的很亂,不是很好。
到此這篇關(guān)于淺析Python WSGI的使用的文章就介紹到這了,更多相關(guān)Python WSGI內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python爬取taptap網(wǎng)站游戲截圖的步驟
這篇文章主要介紹了使用python爬取taptap游戲截圖的步驟,幫助大家更好的理解和學(xué)習(xí)使用python進(jìn)行爬蟲,感興趣的朋友可以了解下2021-05-05