這篇文章主要講解了“WSGI有什么作用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“WSGI有什么作用”吧!
10余年的肥西網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整肥西建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“肥西網(wǎng)站設(shè)計(jì)”,“肥西網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
一個(gè)完整的 Web 應(yīng)用包含兩部分,一個(gè)是服務(wù)器程序(Server),一個(gè)是應(yīng)用程序(Application),服務(wù)器程序負(fù)責(zé)接收瀏覽器發(fā)送過(guò)來(lái)的請(qǐng)求,應(yīng)用程序負(fù)責(zé)處理具體的業(yè)務(wù)邏輯。 比如我基于 Django 框架開(kāi)發(fā)一個(gè)博客應(yīng)用,部署在生產(chǎn)環(huán)境時(shí)會(huì)用 Gunicorn 或者 Uwsgi 作為服務(wù)器程序。
Python 中 Web 框架非常多,F(xiàn)lask、Django、Bottle、Pyramid、Tornado 等等,甚至你也自己也可以造一個(gè) Web 框架,那么這么多框架,為什么他們都可以用 Gunicorn 或者 Uwsgi 來(lái)部署呢?
答案就是 WSGI 規(guī)范。
WSGI 不是框架,也不是一個(gè)模塊,而是介于 Web應(yīng)用程序(Web框架)與 Web Server 之間交互的一種規(guī)范。只要大家都遵循WSGI規(guī)范實(shí)現(xiàn) Web 框架,就可以 使用 Gunicorn 來(lái)運(yùn)行,規(guī)范最早在 PEP333 中被提出。
WSGI 規(guī)定了Web服務(wù)器(Server)和應(yīng)用程序(Application)雙方各自需要實(shí)現(xiàn)什么接口,以便兩者能完美的配合使用,這個(gè)和 USB Type-C 規(guī)范很像, 只要手機(jī)和充電線都遵循了 Type-C 接口規(guī)范, 大家的充電線就可以復(fù)用,不同的是充電誰(shuí)快誰(shuí)慢的問(wèn)題,而蘋(píng)果沒(méi)有遵循Type-C規(guī)范,所以只有他自家的線才能充蘋(píng)果手機(jī)。
現(xiàn)在你應(yīng)該差不多理解什么是WSGI了,那么 WSGI 對(duì)應(yīng)用程序是如何規(guī)范的呢? 很簡(jiǎn)單,你只需要寫(xiě)一個(gè)符合以下格式的函數(shù)即可:
def app(environ, start_response):
start_response("200 OK", [("Content-Type","text/html")])
return ["Hello world!\n"]
這個(gè)函數(shù)必須接收兩個(gè)參數(shù),environ 是一個(gè)類(lèi)似字典的數(shù)據(jù)結(jié)構(gòu),封裝了瀏覽器的請(qǐng)求數(shù)據(jù)。 start_response 是一個(gè)函數(shù),必須在app 里面調(diào)用,參數(shù)就是狀態(tài)碼和響應(yīng)內(nèi)容的類(lèi)型。app 的返回值就是請(qǐng)求的響應(yīng)數(shù)據(jù)。 最終 app 是被 server 來(lái)調(diào)用的。
現(xiàn)在我們用 Python 內(nèi)建的 http server 來(lái)啟動(dòng)這個(gè)程序
from wsgiref.simple_server import make_server
if __name__ == "__main__":
httpd = make_server("", 8000, app)
print("Serving http on port 8000")
httpd.serve_forever()
啟動(dòng),訪問(wèn)地址:
感謝各位的閱讀,以上就是“WSGI有什么作用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)WSGI有什么作用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!