我有两个看起来很相似的路径操作函数,除了第一个返回特定用户的所有数据,第二个仅返回当前的数据em>(已登录)用户(使用架构 UserOut
,字段较少):
@router.get("/{id}", response_model=User)
async def get_user(user_id: PydanticObjectId):
user = await User.find_one(User.id == user_id)
if user is None:
raise HTTPException(status_code=404, detail="User not found")
return user
@router.get("/me")
async def get_current_user(current_user: User = Depends(get_current_active_user)):
return current_user
问题是当我从 Postman 调用第二种方法时,它将端点 /me
作为第一个端点的 id
,所以我总是得到 pydantic 验证“我”不是有效的用户 ID
的错误。
我该如何解决这个问题?我是否需要修改我的端点或是否有任何其他选择?
最佳答案
你可以很容易地通过交换两个路径操作函数的位置来解决这个问题(即在 /{id}
之前声明 /me
):
@router.get("/me")
async def get_current_user():
pass
@router.get("/{id}")
async def get_user():
pass
因为 path operations are evaluated in order , 这确保首先评估端点 /me
(这是一个固定路径,可用于获取有关当前用户的数据),如果没有匹配项,则端点 /{id}
然后被评估(用于通过某些用户 ID 获取有关特定用户的数据)。
https://stackoverflow.com/questions/73253559/