我有两个路径操作函数,它们看起来很相似,不同之处在于第一个函数返回specific个用户的所有数据,第二个函数只返回current个(已登录)用户的数据(使用模式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,因此我总是得到简单的验证错误"me" is not a valid user 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获取关于特定用户的数据).

Python相关问答推荐

如何找到满足各组口罩条件的第一行?

Polars:用氨纶的其他部分替换氨纶的部分

数据抓取失败:寻求帮助

如何在Python脚本中附加一个Google tab(已经打开)

在Python中动态计算范围

在极性中创建条件累积和

幂集,其中每个元素可以是正或负""""

从旋转的DF查询非NaN值

Gekko中基于时间的间隔约束

如何从pandas DataFrame中获取. groupby()和. agg()之后的子列?

Odoo16:模板中使用的docs变量在哪里定义?

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

使用嵌套对象字段的Qdrant过滤

如何强制向量中的特定元素在Gekko中处于优化解决方案中

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

利用SCIPY沿第一轴对数组进行内插

如何删除剪裁圆的对角线的外部部分

如何使用Polars从AWS S3读取镶木地板文件

在Django REST框架中定义的URL获得404分

Antlr Python错误处理简单的PLSQL