如何通过 Restplus 获取对象列表?

How can I fetch a list of objects through Restplus?

我尝试使用RESTplus 来获取对象。我的实现遵循 Restplus tutorial。我设法获取了一个对象。但是,我无法获取包含所有对象的列表。

这是重现缺点的最小实现:

from flask import Flask
from flask_restplus import Api, Resource, fields
from mongoengine import Document, connect
from mongoengine.fields import *

app = Flask(__name__)

connect()

api = Api(app)

user_model = api.model('user', {'name': fields.String})
user_model_list = api.model('User List', {'users':fields.List(fields.Nested(user_model))})


class User(Document):
    name = StringField()

@api.route('/Users')
class UserApi(Resource):
    @api.marshal_with(user_model_list)
    def get(self):
        return User.objects().all()

@api.route('/User')
class UserApi(Resource):
    @api.marshal_with(user_model)
    def get(self):
        return User.objects().first()

# Insert data into database
@app.before_first_request
def init():
    User(name='John').save()
    User(name='Sue').save()
    User(name='Li').save()


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000

这是GET http://127.0.0.1:5000/Users

的输出
{
    "users": null
}

您可以通过两种方式完成。

使用参数as_list:

@api.marshal_with(user_model, as_list=True)

或使用装饰器@marshal_list_with:

@api.marshal_list_with(user_model)

这里是 link 文档: https://flask-restplus.readthedocs.io/en/0.2/documenting.html#documenting-with-the-api-marshal-with-decorator

我的方法中的问题是 MongoEngine returns 一个 mongoengine.queryset.queryset.QuerySet 蚂蚁不是列表。将 QuerySet 转换为列表后,即使没有 as_list=Truemarshal_list_with().

它也能正常工作
@api.route('/User')
class UserApi(Resource):
    @api.marshal_with(user_model)
    def get(self):
        return list(User.objects().first())