以下是在Flask上构建的简单REST API的示例,其中包含flask-restful和mongoengine:
from flask import Flask, jsonify
from flask_restful import Resource, Api
from flask_mongoengine import MongoEngine
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
'db': 'persons',
'host': 'localhost',
'port': 27017
}
api = Api(app)
db = MongoEngine(app)
class Person(db.Document):
firstname = db.StringField(required=True)
lastname = db.StringField(required=True)
class PersonList(Resource):
def get(self):
return jsonify(Person.objects)
api.add_resource(PersonList, '/persons')
if __name__ == '__main__':
app.run(debug=True)
我是否真的每次都要调用flask.jsonify()(在每个处理db的方法中)将mongoengine对象序列化为JSON?
答案 0 :(得分:0)
是。 jsonify
将Person.objects
的JSON输出转换为Flask响应。
没有。您只需要从资源端点返回可序列化为JSON的数据结构。
def get(self):
return Person.objects.to_mongo()
此外,如果您希望在代码中稍后处理JSON转换(不太好主意!因为它使返回值与IMO不一致)restful.Api
{{ 3}}
from mongoengine.base.document import BaseDocument
...
@api.representation('application/json')
def output_json(data, code, headers=None):
if isinstance(data, BaseDocument)
dump = json.dumps(data.to_mongo())
else:
dump = json.dumps(data)
resp = make_response(dump, code)
resp.headers.extend(headers or {})