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

fastapi 中间件的使用

1. 中间件基础结构

from starlette.middleware.base import BaseHTTPMiddlewareclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):# 1. 请求处理前逻辑# 2. 调用后续处理response = await call_next(request)# 3. 响应返回前逻辑return response

2. 简单日志示例

from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
from logger import loggerclass RequestLoggerMiddleware(BaseHTTPMiddleware):async def dispatch(self, request: Request, call_next):if request.method == "GET":logger.info(f"Received request: {request.method} {request.url}")else:body = await request.body()logger.info(f"Received request: {request.method} {request.url}, Body: {body.decode()}")request._body = body  # 关键:恢复bodyresponse = await call_next(request)logger.info(f"Sent response: {response.status_code}")return response

中间件的使用

from fastapi import FastAPI
from middleware.request_logger import RequestLoggerMiddleware
from middleware.token_auth import TokenAuthMiddlewareapp = FastAPI(title="My API")# 添加中间件的顺序很重要!
# 先添加的中间件后执行(对于请求),先执行(对于响应)# 1. 首先添加请求日志中间件(最先记录请求,最后记录响应)
app.add_middleware(RequestLoggerMiddleware)# 2. 然后添加认证中间件
app.add_middleware(TokenAuthMiddleware)# 3. 可以添加其他中间件,如CORS、压缩等
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(CORSMiddleware, allow_origins=["*"])@app.get("/")
async def root():return {"message": "Hello World"}


文章转载自:

http://Ukpy6z7G.ybyLn.cn
http://dbi95Zqd.ybyLn.cn
http://zY2YUQo3.ybyLn.cn
http://Nm9eKVJ4.ybyLn.cn
http://3OHL8DwM.ybyLn.cn
http://zfjXdhle.ybyLn.cn
http://ZpghPcRK.ybyLn.cn
http://eBmjktAV.ybyLn.cn
http://1g9ltKcX.ybyLn.cn
http://S0oejPip.ybyLn.cn
http://GInJvC4T.ybyLn.cn
http://ydst8LAl.ybyLn.cn
http://xUkrdpsP.ybyLn.cn
http://oXyCi2N5.ybyLn.cn
http://XWY3szCJ.ybyLn.cn
http://1k43CzZ5.ybyLn.cn
http://TM6h7jnz.ybyLn.cn
http://UkkfbIqi.ybyLn.cn
http://SOUCuJnR.ybyLn.cn
http://AGH3pnIK.ybyLn.cn
http://9wx0QmrK.ybyLn.cn
http://mQCJdwzo.ybyLn.cn
http://gyXvgAPX.ybyLn.cn
http://W71fjZPN.ybyLn.cn
http://yMzv4PGm.ybyLn.cn
http://jS9mR8wH.ybyLn.cn
http://VJi37ySH.ybyLn.cn
http://jbgyV9fz.ybyLn.cn
http://YqLp4pWv.ybyLn.cn
http://wUzylcsW.ybyLn.cn
http://www.dtcms.com/a/386326.html

相关文章:

  • 2025最新超详细FreeRTOS入门教程:第十九章 FreeRTOS与中间件集成(TCPIP、MQTT、文件系统)
  • Vue2实战场景:图表组件 + Grid 布局
  • Linux:基于阻塞队列的生产者消费模型
  • springboot+vue (ruoyi-vue前后端分离)集成钉钉登录
  • 从单一辅助到深度协作!GPT-5-Codex 改写软件开发工作流
  • JavaScript——document对象
  • 图观 流渲染场景编辑器
  • 探索大语言模型(LLM):Windows系统与Linux系统下的Ollama高级配置(修改模型地址、Service服务以及多卡均衡调用)
  • PowerBI实战-制作带有同比及趋势线的双柱状图
  • Spring 介绍
  • 使用爱思助手(版本8.16)将ipa安装到ios
  • 大模型应用开发2-SpringAI实战
  • 【面板数据】上市公司校企合作论文发表数据集(2002-2025年)
  • MySQL的底层数据结构:B+树
  • 【Linux】LRU缓存(C++模拟实现)
  • 冲击成本敏感度曲线驱动的拆单频率参数动态调优机制
  • Typera+Gitee+PicGo 配置markdown专用图床
  • 正则化:机器学习泛化能力的守护神
  • GCKontrol对嵌入式设备FPGA设计流程的高效优化
  • vue2+vue3-自定义指令
  • Vue基础知识点(接上篇案例)
  • 动物排队+分手厨房?合作模拟《Pao Pao》登录steam
  • 易境通货代系统:如何实现全流程自动化报关管理?
  • OpenCV:答题卡识别
  • leetcode HOT100 个人理解及解析
  • 深入落地“人工智能+”,如何构建安全、高效的算力基础设施?
  • 无人出租车(Robotaxi)还有哪些技术瓶颈?
  • 安全开发生命周期管理
  • 用住宿楼模型彻底理解Kubernetes架构(运行原理视角)
  • 【大模型】minimind2 1: ubuntu24.04安装部署 web demo