如何通过 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=True
或 marshal_list_with()
.
它也能正常工作
@api.route('/User')
class UserApi(Resource):
@api.marshal_with(user_model)
def get(self):
return list(User.objects().first())
我尝试使用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=True
或 marshal_list_with()
.
@api.route('/User')
class UserApi(Resource):
@api.marshal_with(user_model)
def get(self):
return list(User.objects().first())