J'essaie de construire une API simple à l'aide de Flask, dans laquelle je veux maintenant lire du JSON POSTÉ. Je fais le POST avec l'extension Postman Chrome, et le JSON I POST l'est tout simplement {"text":"lalala"}
. J'essaie de lire le JSON en utilisant la méthode suivante:
@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
content = request.json
print content
return uuid
Dans le navigateur, il renvoie correctement l'UUID que j'ai mis dans le GET, mais sur la console, il s'imprime simplement None
(là où je m'attends à ce qu'il imprime le {"text":"lalala"}
. Est-ce que quelqu'un sait comment obtenir le JSON publié à partir de la méthode Flask?
Pour référence, voici le code complet pour savoir comment envoyer json à partir d'un client Python:
L'entrée "json =" définira automatiquement le type de contenu, comme indiqué ici: Poster JSON à l'aide de requêtes Python
Et le client ci-dessus fonctionnera avec ce code côté serveur:
la source
C'est comme ça que je le ferais et ça devrait être
Avec
silent=True
set, laget_json
fonction échouera silencieusement lors de la tentative de récupération du corps json. Par défaut, il est défini surFalse
. Si vous attendez toujours un corps json (pas en option), laissez-le commesilent=False
.Le paramètre
force=True
ignorera larequest.headers.get('Content-Type') == 'application/json'
vérification que le flacon fait pour vous. Par défaut, il est également défini surFalse
.Voir la documentation du flacon .
Je recommanderais fortement de quitter
force=False
et de faire en sorte que le client envoie l'en-Content-Type
tête pour le rendre plus explicite.J'espère que cela t'aides!
la source
silent=True
. Oui, c'est possible et je l'utilise. C'est vraiment basé sur la façon dont vous concevez votre API pour qu'elle soit consommée. S'il n'y a pas de cas comme celui-ci pour votre point de terminaison, supprimez-lesilent=True
ou définissez-le explicitementFalse
.print(content)
aprèscontent = request.get_json()
l'objet ... mais comme un objet Python valide (et non comme un objet JSON valide). Par exemple, il utilise des guillemets simples tandis que JSON requiert strictement des guillemets doubles pour les valeurs de clé (chaînes) en tant que valeurs de chaîne. Si vous voulez la représentation JSON, utilisez-lajson.dumps()
avec l'objet.En supposant que vous avez publié un JSON valide avec le
application/json
type de contenu,request.json
les données JSON seront analysées.la source
response = request.post('http://127.0.0.1:5000/hello', json={"foo": "bar"})
. Suite à cette courseresponse.json()
devrait revenir{'foo': 'bar'}
{'foo': 'bar'}
n'est pas un JSON valide. Il peut s'agir d'une représentation d'objet Python valide qui ressemble beaucoup à JSON, mais JSON valide utilise strictement des guillemets doubles.get_json()
méthode de requête décode de JSON en objets Python, oui. Où vous attendez-vous à ce qu'il produise un document JSON valide?.json()
ou.get_json()
pour renvoyer une représentation d'objet JSON valide, pas un dict Python. Je regarde juste le nom et j'en déduis ce qui pourrait en sortir.Pour tous ceux dont le problème provenait de l'appel ajax, voici un exemple complet:
Appel Ajax: la clé ici est d'utiliser un
dict
puisJSON.stringify
Et côté serveur:
la source
Pour donner une autre approche.
la source
En supposant que vous avez publié un JSON valide,
la source
Essayez d'utiliser le paramètre force ...
request.get_json(force = True)
la source