将mongoengine对象序列化为JSON

时间:2017-11-23 05:21:46

标签: python json flask flask-restful flask-mongoengine

以下是在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?

1 个答案:

答案 0 :(得分:0)

是。 jsonifyPerson.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 {})