电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Python WSGI 規范簡介

瀏覽:9日期:2022-06-22 17:27:27

作為 Python Web 開發者來說,在開發程序階段一般是不會接觸到 WSGI 這個名詞的,但當程序開發完成,考慮上線部署的時候,WSGI 規范是一個繞不開的話題,本文將介紹何為 WSGI。

WSGI 全拼 Web Server Gateway Interface,是為 Python 語言定義的 Web 服務器和 Web 應用程序(或框架)之間的一種通用編程接口。翻譯成白話就是說 WSGI 是一個協議,就像 HTTP 協議定義了客戶端和服務端數據傳輸的規范,WSGI 協議定義了 Web 服務器和 Web 應用程序之間協同工作的規范。

Python Web 應用部署方案

Flask 或 Django 等 Web 框架都提供了內置的 Web Server,本地開發階段可以使用 flask run 或 python manage.py runserver 來分別啟動 Flask 或 Django 內置的 Server。

在生產環境部署應用時,通常不會使用框架內置的 Server,而是使用 Gunicorn 或 uWSGI 來部署,以獲得更好的性能。部署過 Python Web 應用的同學應該對如下部署架構有所了解,左側是瀏覽器,右側是服務器。在服務器內部,首先通過 Nginx 來監聽 80/443 端口,當接收到來自客戶端的請求時,Nginx 會將請求轉發到監聽 5000 端口的 Gunicorn/uWSGI Server,接著請求會通過 WSGI 協議被傳遞到 Flask/Django 框架,在框架內部處理請求邏輯后,會將響應信息按照原路返回。

Python WSGI 規范簡介

你可能會問,Nginx 性能很高,為什么不將應用直接部署到 Nginx 上,而是中間通過 Gunicorn/uWSGI 做一層轉發呢?因為 Nginx 沒有遵循 WSGI 規范,并不能像 Gunicorn/uWSGI 這樣很容易的與 Flask/Django 框架結合起來。

WSGI 規范

根據 Python Web 應用部署架構,我們知道了 WSGI 所處的位置,接下來看下 WSGI 規范具體定義了哪些內容。

如同 HTTP 協議有一個客戶端和一個服務端,WSGI 協議有一個 Application 端和一個 Server 端,其中 Application 就是指 Flask、Django 這些 Web 框架,而 Server 就是指 Gunicorn、uWSGI 等 Web 服務器。

WSGI 協議規定 Application 端需要實現成一個可調用對象(函數、類等),其接口如下:

def simple_app(environ, start_response): status = ’200 OK’ response_headers = [(’Content-type’, ’text/plain’)] start_response(status, response_headers) return [’Hello world!n’]

simple_app 就是一個最簡單的 Application,它需要接收兩個參數,environ 是一個 dict,其中保存了所有 HTTP 請求相關的信息,由 Server 端提供,start_response 是一個可調用對象,同樣由 Server 端提供,simple_app內部需要調用一次 start_response,并將 狀態碼 和 響應頭 當作參數傳遞給它,simple_app 最終會返回一個可迭代對象作為 HTTP Body 內容返回給客戶端。

我們已經知道了 Application 端接口,接下來看下一個符合 WSGI 協議的 Server 端實現:

import osdef wsgi_server(application): environ = dict(os.environ.items()) def start_response(status, response_headers):print(f’status: {status}’)print(f’response_headers: {response_headers}’) result = application(environ, start_response) for data in result:print(f’response_body: {data}’)

示例中 Server 端同樣使用函數來實現,wsgi_server 接收一個 application 作為參數,在其內部構造了 environ 和 start_response 兩個對象,這里使用環境變量信息來模擬 HTTP 請求信息構造 environ 字典,start_response 同樣被定義為一個函數,供 application 在內部對其進行調用,wsgi_server 函數最后會調用 application 并對其進行打印。

現在有了 Application 端和 Server 端,我們可以來測試一下這個簡單的 WSGI 程序示例。只需要將 simple_app 作為參數傳遞給 wsgi_server 并調用 wsgi_server 即可:

wsgi_server(simple_app)

執行以上代碼,將得到如下打印:

status: 200 OKresponse_headers: [(’Content-type’, ’text/plain’)]response_body: Hello world!

以上,我們分別實現了符合 WSGI 規范的 Application 端和 Server 端,雖然程序看起來比較簡陋,但不論多么復雜的 Python Web 框架和 Server 都同樣遵循此規范。

WSGI 實際應用

學習了 WSGI 規范,我們可以來驗證下平時使用的 Python Web 框架是否真的遵循此規范,這里以 Flask 框架源碼為例,可以在 https://github.com/pallets/flask/blob/master/src/flask/app.py 查看 Flask 的定義:

class Flask(Scaffold): ... def __call__(self, environ, start_response):'''The WSGI server calls the Flask application object as theWSGI application. This calls :meth:`wsgi_app`, which can bewrapped to apply middleware.'''return self.wsgi_app(environ, start_response)

Flask 類內部通過實現 __call__ 方法,使得 Flask 實例對象成為一個可調用對象,其接口實現同樣符合 WSGI Application 規范。

以上就是Python WSGI 規范簡介的詳細內容,更多關于Python WSGI 規范的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 偏心半球阀-电动偏心半球阀-调流调压阀-旋球阀-上欧阀门有限公司 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 压力变送器-上海武锐自动化设备有限公司 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 上海办公室装修,写字楼装修—启鸣装饰设计工程有限公司 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 雾度仪_雾度计_透光率雾度仪价格-三恩时(3nh)光电雾度仪厂家 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 闪电优家-卫生间防水补漏_酒店漏水渗水维修_防水堵漏公司 | 双舌接地线-PC68数字式高阻计-ZC36|苏海百科| 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 影视模板素材_原创专业影视实拍视频素材-8k像素素材网 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 雷冲击高压发生器-水内冷直流高压发生器-串联谐振分压器-武汉特高压电力科技有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 黄石东方妇产医院_黄石妇科医院哪家好_黄石无痛人流医院 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 |