溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python?WSGI怎么使用

發(fā)布時(shí)間:2023-04-26 10:00:21 來源:億速云 閱讀:83 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Python WSGI怎么使用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“Python WSGI怎么使用”文章能幫助大家解決問題。

本篇文章所依賴的python環(huán)境為:

Python?WSGI怎么使用

什么是WSGI

WSGI也稱之為web服務(wù)器通用網(wǎng)關(guān)接口,全稱是web server gateway interface。它定義了在pythonweb服務(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)用程序,uWSGIwsgiref屬于服務(wù)器網(wǎng)關(guān)。

個(gè)人感覺,WSGI避免了造輪子,事情讓更擅長的人去做,寫服務(wù)器的,那就寫符合WSGI規(guī)范的服務(wù)器就好,如果是寫應(yīng)用端的,就寫符合WSGI規(guī)范應(yīng)用就好。不用在重復(fù)的寫輪子。

除此之外,WSGI還能與傳統(tǒng)web服務(wù)器對(duì)接,例如: nginx、apache等進(jìn)行交互。

Python?WSGI怎么使用

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)該傳參statusheaders,其中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ù),并且傳入statusheaders值。

修改代碼寫出符合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è)Serverpdudo_web_sites。

我們使用curl請(qǐng)求一下服務(wù)器。

Python?WSGI怎么使用

發(fā)現(xiàn),哦,只要按照WSGI規(guī)范來書寫,就可以很輕容的寫一個(gè)簡單的服務(wù)器。

關(guān)于“Python WSGI怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI