J'ai une application flask avec la vue suivante:
@menus.route('/', methods=["PUT", "POST"])
def new():
return jsonify(request.json)
Cependant, cela ne fonctionne que si le type de contenu de la demande est défini sur application/json
, sinon le dict request.json
est Aucun.
Je le sais request.data
a le corps de la requête sous forme de chaîne, mais je ne veux pas l'analyser en dict chaque fois qu'un client oublie de définir le type de contenu de la requête.
Existe-t-il un moyen de supposer que le type de contenu de chaque demande entrante est application/json
? Tout ce que je veux, c'est avoir toujours accès à un request.json
dict, même si le client oublie de définir le type de contenu de l'application sur json.
Utilisez request.get_json()
et définissez force
sur True
:
@menus.route('/', methods=["PUT", "POST"])
def new():
return jsonify(request.get_json(force=True))
De la documentation:
Par défaut, cette fonction ne chargera les données json que si le mimetype est
application/json
mais cela peut être remplacé par le paramètre force.Paramètres:
- force - si défini sur Vrai le type MIME est ignoré.
Pour les anciennes versions Flask, <0.10, si vous voulez pardonner et autoriser JSON, toujours, vous pouvez faire le décodage vous-même, explicitement:
from flask import json
@menus.route('/', methods=["PUT", "POST"])
def new():
return jsonify(json.loads(request.data))
l'objet request
possède déjà une méthode get_json
qui peut vous donner le json quel que soit le type de contenu si vous l'exécutez avec force=True
pour que votre code ressemble à ceci:
@menus.route('/', methods=["PUT", "POST"])
def new():
return jsonify(request.get_json(force=True))
en fait, la documentation flask indique que request.get_json
doit être utilisé à la place de request.json
: http://flask.pocoo.org/docs/api/?highlight=json#flask.Request.json