19。FastAPI中间件
19.FastAPI中间件
在FastAPI中,可以通过中间件在每个请求被特定的路径操作处理之前,以及在每个响应返回之前进行处理。FastAPI中间件是一个函数,其作用为: 接收应用程序的每一个请求 可以对请求做一些事情或者执行任何需要的代码 将请求传递给应用程序的其他部分 (通过某种路径操作) 获取应用程序生产的响应 (通过某种路径操作) 对该响应进行处理或者执行任何需要的代码 返回响应 19.1定义中间件
可以使用装饰器 @app.middleware("http") 来定义中间件,中间件函数的参数: request请求 call_next函数,call_next将接收 request 作为参数,这个函数将 request 传递给相应的路径操作,然后它将返回由相应的路径操作生成的 response, 接下来可以在返回 response 前进一步处理它。
示例代码: import time from fastapi import FastAPI from fastapi import Request app = FastAPI() @app.middleware("http") async def middle(request: Request, call_next): start_time = time.time() response = await call_next(request) m = time.time() - start_time response.headers["X-Run-Time"] = str(m) return response @app.get(path="/test") async def test(): return "Hello world."
执行请求: curl http://127.0.0.1:8000/test -i HTTP/1.1 200 OK date: Tue, 01 Feb 2022 11:55:52 GMT server: uvicorn content-length: 14 content-type: application/json x-run-time: 0.001463174819946289 "Hello world."
上面的代码中,通过中间件来计算请求的实际执行时间。 19.2请求及响应顺序
在使用中间件的情况下,FastAPI请求和响应的处理顺序为:中间件处理请求 -> 路由处理请求 -> 路由处理响应 ->中间件处理响应。代码示例: # coding: utf-8 import time from fastapi import FastAPI from fastapi import Request app = FastAPI() @app.middleware("http") async def middle(request: Request, call_next): print("middleware start") start_time = time.time() response = await call_next(request) m = time.time() - start_time response.headers["X-Run-Time"] = str(m) print("middleware end") return response @app.get(path="/test") async def test(): print("test start") hello = "Hello world." print("test end") return hello
执行请求: curl http://127.0.0.1:8000/test -i HTTP/1.1 200 OK date: Tue, 01 Feb 2022 12:10:19 GMT server: uvicorn content-length: 14 content-type: application/json x-run-time: 0.002346038818359375 "Hello world."
后台print输出: middleware start test start test end middleware end19.3中间件的用途
FastAPI的中间件可以拦截所有请求,同时也可以拦截所有响应,所以,一般情况下,可以针对请求和响应做一些统一的公共处理,比如:拦截请求后,记录用户的行为,或者对于特殊的处理进行鉴权等。
为什么现在总听到华为和格力,曾经红极一时的海尔干啥去了?海尔到国际市场高调去了,已经连续十三年全球大家电第一了!海尔智家的产品有一半是以海尔自己的品牌买到了国外,不是代工也不是贴牌!海尔集团营收已经过3000亿了!张瑞敏已经平稳的把海尔
无纸化学习越来越热门,但是万一iPad坏了怎么办?坏了不怕,只要文件还在,其他的都不是问题所以你需要一个带云盘的APP软件。说说我的解决方案1用GoodNotes我记笔记一般用GoodNotes,50元永久使用价格。打开PDF版的
总投资560亿,中芯国际再次出手,联手国家队攻坚缺芯问题文JING审核子扬校对知秋中国制造业的命脉,人才缺口达到300万,又一就业风口迎来黄金十年作为制造业大国,中国更是被称为世界工厂。但中国并非制造业强国,与欧美国家相比,中国制造业无
京东副总裁身患绝症,为活命斥资千万造新药,是自救也是为救人文财图说编辑财图说他是身家过亿的京东副总裁,是互联网财税联盟会长,是中国电子发票第一人,更是各大顶尖高校争相邀请的做客教授。按照所有成功学意义上的标准来衡量他,他都是在当下社会能够
2021macbookpro使用一周16g内存,1t硬盘的配置,平时经常开12个androidstudio,13个idea,偶尔docker,mysql等等,本来想定制32g,512ssd的,一个要等,另外一个,觉得
网速越来越慢找到原因了路由器已经成为每个家庭必不可少的设备之一,一台小小的无线的路由器就能让全家人上网,一般情况下,很多网友家里的路由器设备每天都是24小时开着的,那么现在问题来了,在路由器不用的情况下
深思挖矿就是挖坑来源读特国家发改委在昨天举行的例行新闻发布会上宣布,将持续做好虚拟货币挖矿全链条治理工作,下一步将以产业式集中式挖矿国有单位涉及挖矿和比特币挖矿为重点开展全面整治。所谓挖矿,简单说
省钱买A7M4?晒晒趴趴双十一买了啥今年最想要购入的产品可能就是已经发布,但是很难买到的A7M4了,有朋友到实体店询问说要等半年以上对于A7M4趴趴不止吐槽了一次了,鬼子的刀法一如既往地恶心曾经的屠龙者也终成了恶龙,
酒店的投影仪除了看片,还能这么用外出旅游住酒店,顾客最在意的是什么?除了干净卫生,那就是酒店的舒适度和创意点,好的创意点决定了酒店能吸引多少顾客,而舒适度决定了酒店能积攒多少回头客。近年来,国内的民宿和单体酒店数
推进支付体系畅通微信支付与10余家银行机构实现互联互通本报记者王宁支付服务市场互联互通已成为行业趋势,越来越多的生态开放及支付合作正在开展。近日,腾讯微信支付与多家银行机构合作,在全面推进互联互通上取得显著进展,合作机构包括云闪付工商
阿里人永远不变的是变化很荣幸刚成为一名阿里人,入职以来一直在支付宝工作。在这三年里,感受最深的是永远不变的是变化。先说公司,支付宝的公司愿景是人人都用支付宝。从公司架构产品品种销售方式到合规理念等等一直