python - 如何处理在 FastAPI 中混淆的路径操作?

我有两个看起来很相似的路径操作函数,除了第一个返回特定用户的所有数据,第二个仅返回当前的数据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/

相关文章:

python - 如何按列导出数据框以分隔 csv 文件?以及如何将不同数据框中的列附加到分离的 c

r - 如何在 R 中生成向量的所有可能的连续 n 元组?

c - gcc中的 '-Wextra'和 '-pedantic'有什么区别?

python - 如果数字在 Pandas 的指定范围内,如何返回值

r - 选择仅连续运行特定值的组

r - 如何在R中自动使函数的结果成为同一函数的参数

c++ - 创建其他对象时如何使用同一个对象实例?

delphi - 组件是特定类 - 在 BPL 结构中不起作用

kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?

caching - Aerospike 为特定字段设置到期日期