【问题标题】:Serializing mongoengine objects into JSON将 mongoengine 对象序列化为 JSON
【发布时间】:2018-05-06 23:35:03
【问题描述】:

下面是一个使用 Flask-restful 和 mongoengine 构建在 Flask 上的简单 REST API 示例:

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)

我真的必须每次(在每个处理 db 的方法中)调用 flask.jsonify() 来将 mongoengine 对象序列化为 JSON 吗?

【问题讨论】:

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


    【解决方案1】:

    是的。 jsonifyPerson.objects 的 JSON 输出转换为 Flask 响应。

    没有。您只需从资源端点返回可序列化为 JSON 的数据结构。

    def get(self):
        return Person.objects.to_mongo()
    

    另外,如果您想在代码中稍后处理 JSON 转换(这不是一个好主意!,因为它使返回值与 IMO 不一致)restful.Apirepresentation for application/json can be overridden

    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 {})
    

    【讨论】:

      猜你喜欢
      • 2014-12-01
      • 2010-10-08
      • 1970-01-01
      • 2016-12-22
      • 2018-07-20
      • 2021-12-16
      相关资源
      最近更新 更多