Question

@route('/locations', method='GET')
def get_location():
    entity = db['locations'].find({'coordinate2d': {'$near': [37.871593, -122.272747]}}).limit(3)
    if not entity:
        abort(404, 'No nearby locations')
    return entity

La réaction ci-dessus pour la partie de code est:

Error 500: Internal Server Error

Sorry, the requested URL 'http://localhost:8080/locations' caused an error:

Unsupported response type: <type 'dict'>

Comment puis-je saisir cette information de mongo comme un type bouteille peut revenir JSON?

Était-ce utile?

La solution

La solution complète est une combinaison de la transformation du pointeur de DB à une liste, réglant manuellement le type de réponse personnalisée + codant pour la valeur de retour

@route('/locations/:lat/:lng', method='GET')
def get_location(lat,lng):
    response.content_type = 'application/json'
    objdb = db.locations.find({'coordinate2d': {'$near': [lat,lng]}}, {'coordinate2d':bool(1)}).skip(0).limit(3)
    entries = [entry for entry in objdb]
    return MongoEncoder().encode(entries)

Dans mon cas, ce produit:

[
    {
        "_id": "4f4201bb7e720d1dca000005",
        "coordinate2d": [
            33.02032100000006,
            -117.19483074631853
        ]
    },
    {
        "_id": "4f4201587e720d1dca000002",
        "coordinate2d": [
            33.158092999999994,
            -117.350594
        ]
    },
    {
        "_id": "4f42018b7e720d1dca000003",
        "coordinate2d": [
            33.195870000000006,
            -117.379483
        ]
    }
]

Autres conseils

Selon la mention doc sur la bouteille http://bottlepy.org/docs/dev/ vous devez retourner la chaîne du décorateur @route. Vous devez retourner le modèle avec des données ou chaîne.

Si vous voulez générer le JSON alors vous devez changer le Content-Type.

Dictionnaires

Comme mentionné ci-dessus, les dictionnaires python (ou sous-classes celui-ci) sont automatiquement transformées en chaînes JSON et retournés au navigateur avec l'en-tête Content-Type ensemble à l'application / JSON. Cela rend plus facile à mettre en œuvre des API à base JSON. Formats de données autres que JSON sont trop pris en charge. Voir le tutoriel-sortie-filtre pour apprendre plus.

http://bottlepy.org/docs/dev/ tutorial.html? highlight = # JSON générateur de contenu

Je suis cette erreur quand je tentais de retourner une liste de python. Je suppose qu'il se traduirait par JSON, mais il n'a pas. Il fait à la ligne bottle.py où elle traiterait iterables et a trouvé la première dict dans la liste et l'erreur ci-dessus a jeté.

Pour contourner ce problème, je simplement EMBEDDED ma liste dans un dict.

return {'response': []}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top