0

我正在关注 testdriven.io 课程。

我发现通过添加 GET All users 路由不起作用,因为请求需要用户 ID。

在 users.py 文件中,我有:

    def get(self):  
        return User.query.all(), 200

def get(self, user_id):  
     ...  

然后有

api.add_resource(UsersList, '/users')  
api.add_resource(UsersList, '/users/<int:user_id>')  

似乎通过包含 '/users' 路由失败的 '/users/int:user_id' 路由:

src/tests/test_users.py::test_all_users - TypeError: get() missing 1 required positional argument: 'user_id'

如果我注释掉 api.add_resource(UsersList, '/users/int:user_id') 路由,那么所有用户路由都可以正常工作。

有没有办法让(所有用户和用户 ID 的用户)路由都工作?

我能在 Lumen 等其他框架中做类似的事情吗(PHP 所以可能遗漏了一些明显的东西。

谢谢

雅斯

4

1 回答 1

0

我认为这可能是答案,但我希望能够添加多个 GET 函数来分离代码。

这个:

以相同的方法处理 /users 和 users/id 路由。是否可以同时拥有 GET 功能并分离逻辑/代码。

    @api.marshal_with(user)
    def get(self, user_id=None):
        if user_id is None:
            return User.query.all(), 200

        user= User.query.filter_by(id=user_id).first()
        if not user:
            api.abort(404, f"User {user_id} does not exist")

        return user, 200
于 2022-01-03T23:02:39.373 回答