我有两个看起来相似的路径操作函数,除了第一个返回特定用户的所有数据,第二个仅返回当前(登录)用户的数据(使用 schema 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
Run Code Online (Sandbox Code Playgroud)
问题是当我从 Postman 调用第二个方法时,它将端点/me作为id第一个端点,所以我总是收到 pydantic 验证错误"me" is not a valid user ID。
我该如何解决这个问题?我是否需要修改我的端点或者是否有其他替代方案?
您可以通过交换两个路径操作函数的位置(即在/mebefore 之前声明/{id})来很容易地解决这个问题:
@router.get("/me")
async def get_current_user():
pass
@router.get("/{id}")
async def get_user():
pass
Run Code Online (Sandbox Code Playgroud)
因为路径操作是按顺序评估的,所以这可以确保/me首先评估端点(这是一个固定路径,可用于获取有关当前用户的数据),如果不匹配,则/{id}接着评估端点(这用于通过某个用户 ID 获取有关特定用户的数据)。
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |