色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

瀏覽:15日期:2022-06-17 11:16:27
目錄WSGI基本原理1. WSGI處理過程2. WSGI示例3. WSGI web服務(wù)器和應(yīng)用程序WSGI基本原理1. WSGI處理過程

python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)

瀏覽器到WSGI Server:瀏覽器發(fā)送的請求會先到WSGI Server。 environ:WSGI Server會將HTTP請求中的參數(shù)等信息封裝到environ(一個字典)中。 WSGI Server到WSGI App:App就是我們自己編寫的后臺程序,每個URL會映射到對應(yīng)的入口處理函數(shù)(或其他可調(diào)用對象),WSGI Server調(diào)用后臺App時,會將environ和WSGI Server中自己的一個start_response函數(shù)注入到后臺App中。 邏輯處理:后臺函數(shù)(或其他可調(diào)用對象)需要接收environ和start_response,進(jìn)行邏輯處理后返回一個可迭代對象,可迭代對象中的元素為HTTP正文。 WSGI App到WSGI Server:后臺函數(shù)處理完后,會先調(diào)用start_response函數(shù)將HTTP狀態(tài)碼、報(bào)文頭等信息(響應(yīng)頭)返回給WSGI Server,然后再將函數(shù)的返回值作為HTTP正文(響應(yīng)body)返回給WSGI Server。 WSGI Server到瀏覽器:WSGI Server將從App中得到的所有信息封裝為一個response返回給瀏覽器。 2. WSGI示例

wsgiref簡單示例

運(yùn)行以下示例程序后,在瀏覽器中輸入以http://127.0.0.1:9999/開頭的隨意一個url都可以看到返回結(jié)果。實(shí)例程序中所有url都會以同一個App進(jìn)行處理,實(shí)際生產(chǎn)環(huán)境中不同的url肯定是需要映射到不同的App上的,但這部分本文不作講解。

# wsgiref是Python自帶的內(nèi)置庫,它用來開發(fā)者對wsgi進(jìn)行測試用的,不可以用在生產(chǎn)環(huán)境中from wsgiref.simple_server import make_server, demo_app# wsgi也是基于socket server編寫# 默認(rèn)情況下會將所有url都傳入demo_app進(jìn)行處理,具體可參考demo_app源碼# app參數(shù)可以是任何可調(diào)用對象,但是內(nèi)部處理需要參考demo_app源碼,即environ處理、start_response調(diào)用、返回值類型ws = make_server(’127.0.0.1’, 9999, demo_app)# 啟動服務(wù)ws.serve_forever()

demo_app源碼

def demo_app(environ,start_response): from io import StringIO stdout = StringIO() print('Hello world!', file=stdout) print(file=stdout) # environ是一個字典,包含了所有請求信息 h = sorted(environ.items()) for k,v in h:print(k,’=’,repr(v), file=stdout) # return之前需要調(diào)用start_response設(shè)置響應(yīng)頭信息 start_response('200 OK', [(’Content-Type’,’text/plain; charset=utf-8’)]) return [stdout.getvalue().encode('utf-8')] # 一個可迭代對象,元素為byte類型,元素內(nèi)容依據(jù)start_response中指定的Content-Type來指定

demo_app類定義的兩種方式

# 第一種方式:定義類的__init__和__iter__方法,前者用來接收和處理environ和start_response,后者生成一個可迭代對象# make_server中app參數(shù)只需傳入類名即可class ApplicationClass: def __init__(self, environ, start_response):self.e = environself.sr = start_response def __iter__(self):from io import StringIOstdout = StringIO()print('Hello world!', file=stdout)print(file=stdout)h = sorted(self.e.items())for k, v in h: print(k, ’=’, repr(v), file=stdout)self.sr('200 OK', [(’Content-Type’, ’text/plain; charset=utf-8’)])yield from [stdout.getvalue().encode('utf-8')]# 第二種方式:定義__call__方法,接收和處理environ和start_response,并返回一個可迭代對象# make_server中app參數(shù)需要傳入類的實(shí)例class ApplicationInstance: def __call__(self, environ, start_response):from io import StringIOstdout = StringIO()print('Hello world!', file=stdout)print(file=stdout)h = sorted(environ.items())for k, v in h: print(k, ’=’, repr(v), file=stdout)start_response('200 OK', [(’Content-Type’, ’text/plain; charset=utf-8’)])return [stdout.getvalue().encode('utf-8')]3. WSGI web服務(wù)器和應(yīng)用程序

WSGI web服務(wù)器

本質(zhì)上是一個TCP服務(wù)器,監(jiān)聽在特定的端口上。 支持HTTP協(xié)議,能夠解析HTTP請求報(bào)文,能夠按HTTP協(xié)議將響應(yīng)數(shù)據(jù)封裝為報(bào)文并返回給瀏覽器。 實(shí)現(xiàn)了WSGI協(xié)議,該協(xié)議約定了和應(yīng)用程序之間的接口,即url到app之間的映射。

WSGI應(yīng)用程序

遵從WSGI協(xié)議。 本身是一個可調(diào)用對象。 調(diào)用start_response,返回響應(yīng)頭部。 返回包含正文的可迭代對象。

以上就是python 內(nèi)置庫wsgiref的使用(WSGI基礎(chǔ)入門)的詳細(xì)內(nèi)容,更多關(guān)于python wsgiref的使用的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 成人香蕉视频 | 中文日韩字幕一区在线观看 | 国产一区私人高清影院 | 国产精品一区二区三区免费 | 欧美怡红院在线观看 | 亚洲一级二级三级 | 男人的天堂精品国产一区 | 乱系列中文字幕在线视频 | 久久88香港三级台湾三级中文 | 色拍拍噜噜噜aⅴ在线观看 色青青草原桃花久久综合 色婷婷91 | 国产精品自拍一区 | 91精品国产高清91久久久久久 | 国产欧美一区二区三区在线 | 国产在线精品福利一区二区三区 | 国产综合亚洲专区在线 | 国产精品一区二区av | 91精品国产综合久久香蕉 | 亚洲人成网站色7799在线观看 | 免费大片黄手机在线观看 | 成人免费久久精品国产片久久影院 | 国产一区高清 | 一级毛片牲交大片 | 精品国产日韩亚洲一区二区 | 午夜不卡在线 | 黑色丝袜美美女被躁视频 | 一区二区三区免费视频观看 | 精品一久久香蕉国产线看观 | 亚洲日本欧美产综合在线 | 国产成人亚洲合集青青草原精品 | 欧美成人性生活视频 | 国产91精品一区二区麻豆亚洲 | 久久久www成人免费精品 | 久久亚洲综合中文字幕 | videos欧美丰满肥婆 | 91视频国内| 看一级特黄a大片日本片 | 久久久久久国产精品免费 | 亚洲精品天堂在线观看 | 欧美一级视频在线 | 国产韩国精品一区二区三区久久 | 亚洲精品视频久久久 |