Flask-RESTful字段。列表始终返回None

问题描述 投票:0回答:1

我有两个资源,UserCollectionResourceUserResource。后者工作正常,并按预期返回用户。前者的get方法始终返回[{'users': None}]。我遵循了许多示例,无法弄清是什么导致了这种行为。

user_fields = {
    'id': fields.Integer,
    'username': fields.String
}

user_collection_fields = {
    'users': fields.List(fields.Nested(user_fields))
}

class UserCollectionResource(Resource):
    @marshal_with(user_collection_fields)
    def post(self):
        args = post_users_parser.parse_args()
        test_user = UserModel.query.filter_by(username=args.username)
        if test_user:
            abort(409)
        else:
            user = User(args.username, args.password, ifttt_key=args.ifttt_key)
            db.session.add(user)
            db.session.commit()
            return user, 201

    @marshal_with(user_collection_fields)
    def get(self):
        users = UserModel.query.filter(UserModel.username != "admin").all()
        if not users:
            abort(404)
        else:
            return users

class UserResource(Resource):
    @marshal_with(user_fields)
    def get(self, user_id=None):
        user = UserModel.query.filter_by(id=user_id).filter(UserModel.username != "admin").first()
        if not user:
            abort(404)
        else:
            return user

api.add_resource(UserCollectionResource, '/api/users', endpoint="users")
api.add_resource(UserResource, '/api/users/<int:user_id>', endpoint="user")

我认为值得注意的是,在return语句之前打印users实际上显示了用户列表:[<User(Username ='zeke')>]

python flask flask-restful
1个回答
0
投票

我在此issue的帮助下找到了答案。 UserCollectionResourceget函数需要返回{"users": : users}而不是users。文档并没有明确指出这一点。

© www.soinside.com 2019 - 2024. All rights reserved.