我正在尝试创建一个使用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。在数据库中,我应该准确地操作数据输出方式,还是应该在控制器中完成?
答案 0 :(得分:1)
我倾向于保持请求处理程序尽可能简单和薄。如果json.dumps
对您不利并且您不喜欢在数据库模块中放置一堆特定于格式/序列化的代码,我通常会创建一个名为serializers.py
的模块来自定义输出。
至于最佳实践,我认为最好不要放一堆,“我希望我的控制器完全按照这样返回它,所以我将把所有这些特定的东西放在我的数据库模块中”。如果喘气你需要返回除json以外的东西(不太可能,我知道)! db模块最好返回db对象(而不是自定义序列化的json字符串),并且有一个单独的模块知道如何序列化文档。