Tout d'abord find_one
renverra un seul dictionnaire ou Aucun s'il n'y a pas d'élément correspondant dans la collection. Je pense donc que page[0]
équivaut à obtenir la valeur du dictionnaire de pages pour la clé 0
Si les documents retournés contiennent ObjectId
comme _id
vous ne pouvez pas simplement utiliser jsonify
car, comme ObjectId
n'est pas JSON sérialisable. Vous pouvez utiliser quelque chose comme ceci :
jsonify({ 'page': make_public_page({k:v for k, v in page.items() if k != '_id'}))
ou vous pouvez simplement supprimer _id
en appelant page.pop('_id')
Vous pouvez également utiliser bson.json_util
. Il contient des outils de conversion entre BSON et JSON.
from flask import Response
from bson import json_util
Et puis remplacez jsonify
avec quelque chose de similaire à ceci :
return Response(
json_util.dumps({'page' : make_public_page(page)}),
mimetype='application/json'
)
Modifier
Si vous voulez une manière courte et grossière de traiter le problème, vous pouvez le faire comme ceci :
from bson import json_util, ObjectId
import json
#Lets create some dummy document to prove it will work
page = {'foo': ObjectId(), 'bar': [ObjectId(), ObjectId()]}
#Dump loaded BSON to valid JSON string and reload it as dict
page_sanitized = json.loads(json_util.dumps(page))