Python web框架fastapi中间件的使用

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,基于标准 Python 类型提示。中间件在 FastAPI 中是一个强大的工具,允许你在请求到达路由处理函数之前或响应返回给客户端之后执行一些代码。

下面是一个使用 FastAPI 中间件的简单示例,这个中间件会记录每个请求的详细信息,包括请求的 IP 地址、请求路径、请求方法以及响应时间。

首先,确保你已经安装了 FastAPI:

复制代码
bash复制代码

|---|-----------------------|
| | pip install fastapi |

然后,你可以创建一个中间件并在 FastAPI 应用中使用它:

复制代码

python复制代码

|---|-------------------------------------------------------------------------------------------|
| | from fastapi import FastAPI, Request, Response |
| | from fastapi.middleware.base import BaseHTTPMiddleware |
| | from datetime import datetime |
| | import time |
| | |
| | app = FastAPI() |
| | |
| | class RequestLogger(BaseHTTPMiddleware): |
| | async def __call__(self, request: Request, call_next): |
| | start_time = time.time() |
| | response = await call_next(request) |
| | process_time = (time.time() - start_time) * 1000 |
| | print(f"Request from {request.client.host} at {datetime.now()}") |
| | print(f" Method: {request.method}, Path: {request.url.path}") |
| | print(f" Response Status: {response.status_code}, Process Time: {process_time:.2f}ms") |
| | return response |
| | |
| | app.add_middleware(RequestLogger) |
| | |
| | @app.get("/") |
| | async def read_root(): |
| | return {"Hello": "World"} |
| | |
| | @app.get("/items/{item_id}") |
| | async def read_item(item_id: int, q: str = None): |
| | return {"item_id": item_id, "q": q} |

在这个示例中,我们定义了一个名为 RequestLogger 的中间件类,它继承自 BaseHTTPMiddleware。这个中间件在请求处理前后记录了一些信息,包括请求的 IP 地址、请求方法、请求路径、响应状态码以及处理时间。然后,我们使用 app.add_middleware(RequestLogger) 将这个中间件添加到 FastAPI 应用中。

当你运行这个应用并发送请求时,你会在控制台看到类似以下的输出:

复制代码

bash复制代码

|---|---------------------------------------------------------|
| | Request from 127.0.0.1 at 2023-10-23 15:00:00.000000 |
| | Method: GET, Path: / |
| | Response Status: 200, Process Time: 123.45ms |

这个输出可以帮助你了解应用的运行情况,包括每个请求的处理时间和响应状态码等信息。

相关推荐
沙蒿同学6 分钟前
我把架构约定编译成了会变红的测试:Wails v2 + Go + Vue3 桌面脚手架实战
前端·后端·github
cpolar技术支持9 分钟前
本地 Playwright 测试报告怎么远程复盘?Trace Viewer 跑起来后,用 cpolar 分享失败现场
前端·自动化测试·测试工具·cpolar·playwright
wordbaby9 分钟前
企业级后台管理系统路由设计与最佳实践指南
前端
专业程序开发源10 分钟前
springboot篮球联赛管理系统13635-计算机课程设计、毕业设计
vue.js·spring boot·后端·python·django·php·课程设计
lie..13 分钟前
30天从零开始学AI应用开发(Day 3):30 分钟搭好开发环境,Python + VSCode 一次配齐
人工智能·python·大模型
胡志辉的博客18 分钟前
【完全开源】IP 纯净度检测 可一键部署到自己的CF
前端·javascript·chrome·ip·chromium
benchmark_cc29 分钟前
策略临时需要一批股票的最新价格,先查行情还是先建股票池?——从量化策略执行逻辑看数据获取顺序
python·数据分析·pandas·量化交易·股票数据·quantdash
成为深度学习高手31 分钟前
XLinear:用一个轻量 MLP,带外生变量做长期时间序列预测
python·深度学习·时序数据库
Hilaku44 分钟前
作为面试官,我最怕遇到什么样的候选人?
前端·javascript·程序员
啊吧怪不啊吧1 小时前
LangChain之模型调用
python·langchain