0

我正在尝试创建一个使用 MongoDB 在 Flask 中吐出 JSON 的 API。

在我的控制器中,我有这样的路由设置:

@frontend.route('/api/get_images_by_building_id/<building_id>')
def api_get_images_by_building_id(building_id):
    building_images = database.get_images_by_building_id(building_id)
    return building_images

在作为数据库导入的 db.py 中,我有以下两个功能:

def get_image_ids_by_building_id(self, building_id):
    try:
        return self.buildings.find_one(ObjectId(building_id),{"vertical_images":1})["vertical_images"]
    except:
        return None

这将返回:

[ObjectId('506638290f536676fc004702'), ObjectId('506638290f536676fc004703'), ObjectId('506638290f536676fc004704'), ObjectId('506638290f536676fc004705'), ObjectId('506638290f536676fc004706'), ObjectId('506638290f536676fc004707'), ObjectId('506638290f536676fc004708')]

第二个功能:

def get_images_by_building_id(self, building_id):
    try:
        image_ids = self.get_image_ids_by_building_id(building_id)
        temp = self.images.find({ "_id" : { "$in" : image_ids } })
        return temp
    except:
        return None

处理 mongo 游标对象的最佳实践是什么?它会导致问题,因为我无法在控制器中对其进行 jsonify。在数据库函数中,我应该完全按照我想要的方式操作数据,还是应该在控制器中完成?

4

1 回答 1

1

我倾向于让请求处理程序尽可能简单和精简。如果json.dumps对您不利,并且您不喜欢将一堆格式/序列化特定代码放在数据库模块中,我通常会创建一个名为serializers.py自定义输出的模块。

至于最佳实践,我认为最好不要放一堆,“我希望我的控制器完全像这样返回它,所以我会将所有这些特定的东西放在我的 db 模块中”。如果您需要返回 json 以外的其他内容怎么办(我知道这不太可能)!?db 模块最好返回 db 对象(而不是自定义序列化的 json 字符串)并拥有一个知道如何序列化文档的单独模块。

于 2012-10-02T02:52:09.203 回答