You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将UserService的get_current_user方法作为FastAPI路由依赖?

问题分析与解决

错误原因

你遇到的问题核心有两点:

  1. 未调用异步方法:依赖函数中返回的是user_service.get_current_user(方法的引用),而非调用该方法后的用户实例,导致FastAPI尝试将方法对象转换为UserOutDTO时,Pydantic无法解析。
  2. 未处理异步逻辑:UserService.get_current_user是异步方法,必须通过await获取结果,同时依赖函数本身也需要声明为async。

正确实现代码

修正后的依赖函数

from fastapi import Depends
from typing import Annotated
from your_module import UserService, User, UserOutDTO

async def get_current_user(user_service: UserService = Depends()) -> User:
    # 调用异步方法并await获取用户实例
    return await user_service.get_current_user()

路由函数调整

如果依赖是异步的,建议路由函数也声明为async(FastAPI也支持同步路由,但异步更匹配逻辑):

@router.get("/me/")
async def test_me(user: Annotated[UserOutDTO, Depends(get_current_user)]):
    return user

可选:模型转换处理

如果User模型和UserOutDTO需要显式转换,可以在依赖中完成:

async def get_current_user(user_service: UserService = Depends()) -> UserOutDTO:
    user = await user_service.get_current_user()
    # 用Pydantic的model_validate将User实例转换为UserOutDTO
    return UserOutDTO.model_validate(user)

内容的提问来源于stack exchange,提问作者Smile1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:17:07