我有两个资源,UserCollectionResource
和UserResource
。后者工作正常,并按预期返回用户。前者的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')>]
.
我在这个问题的帮助下想通了。UserCollectionResource
的get
函数需要返回{"users": : users}
而不是users
。文档并没有明显说明这一点。