久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

python 內置庫wsgiref的使用(WSGI基礎入門)

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

python 內置庫wsgiref的使用(WSGI基礎入門)

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

wsgiref簡單示例

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

# wsgiref是Python自帶的內置庫,它用來開發者對wsgi進行測試用的,不可以用在生產環境中from wsgiref.simple_server import make_server, demo_app# wsgi也是基于socket server編寫# 默認情況下會將所有url都傳入demo_app進行處理,具體可參考demo_app源碼# app參數可以是任何可調用對象,但是內部處理需要參考demo_app源碼,即environ處理、start_response調用、返回值類型ws = make_server(’127.0.0.1’, 9999, demo_app)# 啟動服務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之前需要調用start_response設置響應頭信息 start_response('200 OK', [(’Content-Type’,’text/plain; charset=utf-8’)]) return [stdout.getvalue().encode('utf-8')] # 一個可迭代對象,元素為byte類型,元素內容依據start_response中指定的Content-Type來指定

demo_app類定義的兩種方式

# 第一種方式:定義類的__init__和__iter__方法,前者用來接收和處理environ和start_response,后者生成一個可迭代對象# make_server中app參數只需傳入類名即可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參數需要傳入類的實例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服務器和應用程序

WSGI web服務器

本質上是一個TCP服務器,監聽在特定的端口上。 支持HTTP協議,能夠解析HTTP請求報文,能夠按HTTP協議將響應數據封裝為報文并返回給瀏覽器。 實現了WSGI協議,該協議約定了和應用程序之間的接口,即url到app之間的映射。

WSGI應用程序

遵從WSGI協議。 本身是一個可調用對象。 調用start_response,返回響應頭部。 返回包含正文的可迭代對象。

以上就是python 內置庫wsgiref的使用(WSGI基礎入門)的詳細內容,更多關于python wsgiref的使用的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 久久一区 | 国产精品亚洲综合 | 一区二区三区在线视频播放 | 日本福利在线观看 | 日韩精品专区在线影院重磅 | 99re视频在线播放 | 日本久久网 | 亚洲高清视频在线观看 | 亚洲免费人成在线视频观看 | 91高清视频 | 99re免费视频精品全部 | 精品国内 | 日本黄色短片 | 日韩午夜免费 | 久久久一 | 欧美一级毛片久久99精品蜜桃 | 99精品热| 国产精品99一区二区三区 | 91久久精品日日躁夜夜躁欧美 | 麻豆.蜜桃.91.天美入口 | 91精品视频在线播放 | 久久久www | 亚洲精品国产setv | 依人成人网 | 中文字幕亚洲一区 | 欧美中文在线 | 欧洲视频一区二区三区 | 国产精品久久久久一区二区三区 | 国产精品精品视频一区二区三区 | 精品国产乱码久久久久久丨区2区 | 国产大学生援交视频在线观看 | 精品国产乱码久久久久久88av | 男女羞羞网站 | 欧美精品导航 | 女人夜夜春高潮爽av片 | 成人综合在线观看 | 亚洲小视频| 久久伊人青青草 | 国产人妖在线 | 国产高清在线不卡 | 成人练习生 |