如何将UserService的get_current_user方法作为FastAPI路由依赖?
问题分析与解决
错误原因
你遇到的问题核心有两点:
- 未调用异步方法:依赖函数中返回的是
user_service.get_current_user(方法的引用),而非调用该方法后的用户实例,导致FastAPI尝试将方法对象转换为UserOutDTO时,Pydantic无法解析。 - 未处理异步逻辑:
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
相关产品推荐
相关产品推荐

