当前位置: 首页 > wzjs >正文

编程猫官方网站入口济南网站建设方案服务

编程猫官方网站入口,济南网站建设方案服务,app编程,上海装修公司推荐中间件是一个函数,它在请求特定路径操作之前,以及在每个响应之后执行。 使用装饰器创建中间件 创建一个函数,在函数的顶部使用装饰器 app.middleware("http"). 函数参数如下: request: Request call_next 函数&#…

中间件是一个函数,它在请求特定路径操作之前,以及在每个响应之后执行。

使用装饰器创建中间件

创建一个函数,在函数的顶部使用装饰器 @app.middleware("http").

函数参数如下:

  • request: Request

  • call_next 函数:这个函数将接收 request 作为参数,将 request 传递给相应的 路径操作,然后它将返回由相应的路径操作生成的 response.

import uvicorn
from fastapi import FastAPI, Requestapp = FastAPI()@app.middleware("http")
async def m2(request: Request, call_next):"""第二个中间件"""print("第二个中间件 m2 ...request")response = await call_next(request)print("第二个中间件 m2 ...response")return response@app.middleware("http")
async def m1(request: Request, call_next):"""第一个中间件"""print("第一个中间件 m1 ...request")response = await call_next(request)print("第一个中间件 m1 ...response")return response@app.get("/item/{item_id}")
async def item(item_id: int):print("请求get item id", item_id)return {"item_id": item_id}if __name__ == '__main__':uvicorn.run(app)

运行结果:

第一个中间件 m1 ...request
第二个中间件 m2 ...request
请求get item id 11111
第二个中间件 m2 ...response
第一个中间件 m1 ...response
INFO:     127.0.0.1:58664 - "GET /item/11111 HTTP/1.1" 200 OK

继承BaseHTTPMiddleware

1、定义中间件类:首先,你需要定义一个类,并继承自 starlette.middleware.base.BaseHTTPMiddleware。

2、实现 dispatch 方法:在你的类中,你需要实现 dispatch 方法。这个方法会在请求被传递给下一个中间件或最终的应用程序之前被调用。

3、注册你的中间件:在你的 FastAPI 应用中注册你的中间件。

创建my_middlewares包

示例:计算API接口调用耗时 中间件

创建CalculateTimeMiddleware.py 文件

import timefrom fastapi import Request, FastAPI
from starlette.middleware.base import BaseHTTPMiddlewareclass CalculateTimeMiddleware(BaseHTTPMiddleware):"""计算API接口耗时 单位: 秒"""async def dispatch(self, request: Request, call_next):print("中间件: 计算API接口耗时...")start_time = time.perf_counter()response = await call_next(request)process_time = time.perf_counter() - start_timeprint(f"请求路径: {request.url.path}, 耗时: {process_time} 秒")return response

编写Main.py 文件

import uvicorn
from fastapi import FastAPI
from starlette.requests import Requestfrom my_middlewares.AuthMiddleware import AuthMiddleware
from my_middlewares.CalculateTimeMiddleware import CalculateTimeMiddlewareapp = FastAPI()# 注册中间件
app.add_middleware(AuthMiddleware)  # type: ignore
app.add_middleware(CalculateTimeMiddleware) # type: ignore@app.get("/item/{item_id}")
async def item(item_id: int, request: Request):# 获取上下文变量user_id = request.state.user_idprint("user_id:", user_id)return {"item_id": item_id}if __name__ == '__main__':uvicorn.run(app)

示例:中间件传递参数

使用上下文变量(Context Variables),FastAPI的Request对象允许你设置和获取上下文变量,这在多个中间件或路由处理器之间共享数据非常有用。

编写AuthMiddleware.py文件

from starlette.middleware.base import BaseHTTPMiddlewareclass AuthMiddleware(BaseHTTPMiddleware):"""权限校验,并传递 user_id"""async def dispatch(self, request, call_next):print("中间件: 传递 user_id ...")user_id="user001"# 设置上下文变量 将user_id存储在request.state中request.state.user_id = user_idresponse = await call_next(request)return response

运行结果:

中间件: 计算API接口耗时...
中间件: 传递 user_id ...
user_id: user001
请求路径: /item/111, 耗时: 0.0006680000005871989 秒

http://www.dtcms.com/wzjs/590941.html

相关文章:

  • 天府新区建站公司网站建设与信息安全培训小结
  • 网站(建设)安全自查报告建e网室内设计网官网电脑app下载
  • 公司 网站建设 会计科目网络推广外包哪个公司做的比较好
  • 广州白云做网站发展速度迅猛 具有丰富的网站建设经验
  • 洛龙区网站设计建设wordpress充值金币的插件
  • 垂直网站做网站需要哪些费用支出
  • wordpress建站系统视频教程哪里有网站建设联系方式
  • 南宁网络企业网站win7 做网站服务器
  • 网站备案 后期网络架构方案书
  • 哪些作弊网站龙光城业主论坛家在深圳
  • 网站建设 seo模块北京哪家制作网站好
  • 网站制作广建网站一定要备案吗
  • 合肥 做网站的公司网上花店 网站源代码
  • 建网站 企汇网php快速建网站
  • 江西南昌电子商务网站建设公司南京专业做网站的公司
  • 做网站比较便宜各种网站
  • 加强 廉政网站建设二手交易网站开发系统
  • 动图从哪个网站做怎么做qq代刷网站
  • 网站后台管理员扫描廉政网站建设经验交流
  • 网站开发工作室邯郸之战
  • wordpress外贸网站wordpress cookie
  • 农村建设网站溧阳做网站的哪家好
  • 徐州网站建设方案推广wordpress置顶重复
  • 广州一站式网站建设企业运营包括哪些环节
  • 网站建设丿金手指谷哥12招聘网站可以做两份简历吗
  • 网站投入费用网站建设行业怎么样
  • 南昌做网站的流程莱芜建设网站
  • 怎样优化自己的网站网络设置ip地址
  • 为什么网站要备案58同城石家庄网站建设
  • 网站开发项目详细计划友情链接交易