如何向Python FastAPI路由传递实例化相关参数?
FastAPI传递路由实例化参数的实现方式
FastAPI本身不支持直接通过include_router传递自定义params参数,但可以通过以下几种方案实现你的需求:
1. 依赖注入传递参数(推荐)
这是FastAPI的标准实践,将参数封装为依赖项,在路由处理函数中注入使用:
# server.py 中定义依赖 from fastapi import Depends # 这里的db_params是你在server.py中管理的配置 def get_db_params(): return db_params
路由文件中使用依赖:
from fastapi import APIRouter, Depends user_data_router = APIRouter() @user_data_router.get("/users") async def get_users(db_params=Depends(get_db_params)): # 直接使用db_params进行数据库操作等逻辑 return {"message": "获取用户列表成功"}
server.py中正常挂载路由即可:
app.include_router(user_data_router)
2. 路由工厂函数初始化参数
如果需要在路由创建阶段就传入参数,可以编写工厂函数生成路由实例:
# 路由文件中的工厂函数 def create_user_data_router(db_params): router = APIRouter() # 将参数绑定到路由实例的自定义属性 router.db_params = db_params @router.get("/users") async def get_users(): # 使用路由实例上的参数 return {"db_params": router.db_params} return router
server.py中实例化路由并挂载:
# 传入db_params生成路由实例 user_data_router = create_user_data_router(db_params) app.include_router(user_data_router)
3. 利用App State传递全局参数
如果参数是全局共享的,可以存入FastAPI应用的state属性,在路由中通过请求对象获取:
# server.py中设置全局状态 app.state.db_params = db_params
路由文件中获取参数:
from fastapi import APIRouter, Request user_data_router = APIRouter() @user_data_router.get("/users") async def get_users(request: Request): # 从应用状态中取出参数 db_params = request.app.state.db_params return {"message": "获取用户列表成功"}
内容的提问来源于stack exchange,提问作者Conic
相关产品推荐
相关产品推荐

