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 には、次の 2 つの機能があります。

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')]

そして2番目の機能:

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 カーソル オブジェクトを処理するためのベスト プラクティスは何ですか? コントローラーでjson化できないため、問題が発生します。データベース関数では、出力したい方法でデータを正確に操作する必要がありますか、それともコントローラーで行う必要がありますか?

4

1 に答える 1

1

私は、リクエスト ハンドラーをできるだけシンプルで薄いものにする傾向があります。json.dumpsが良くなく、データベース モジュールにフォーマット/シリアライゼーション固有のコードを大量に配置したくない場合は、通常serializers.py、出力をカスタマイズするために呼び出されるモジュールを作成します。

ベストプラクティスについては、「コントローラーにこのように正確に返してもらいたいので、この特定のものをすべて自分の db モジュールに入れます」というようなことをたくさん入れないのが最善だと思います。あえぎ、json 以外の何かを返す必要があるとしたら (ありそうもないことですが) !? db モジュールが (カスタムでシリアル化された json 文字列ではなく) db オブジェクトを返し、ドキュメントをシリアル化する方法を知っている別のモジュールを持つことが最善です。

于 2012-10-02T02:52:09.203 に答える