Je ne sais pas comment forcer le type MIME application/json
pour une vue dans Flask. Voici une vue simple que j'ai réunie à des fins de démonstration:
@app.route("/")
def testView():
ret = '{"data": "JSON string example"}'
return ret
La chaîne JSON (contenue dans la variable ret
) est collectée ailleurs (en utilisant stdout d'un autre programme en utilisant subprocess
) donc je ne peux pas utiliser jsonify
fourni avec Flask.
J'ai jeté un œil à la question "Returning Json" et this Stackoverflow mais je n'ai pas eu de chance jusqu'à présent. Je regarde autour de moi depuis un certain temps maintenant, mais je pensais que je demanderais ici juste au cas où quelqu'un serait tombé sur cela.
Merci.
Voir le réponse ci-dessous
La solution:
@app.route("/")
def testView():
ret = '{"data": "JSON string example"}'
resp = Response(response=ret,
status=200,
mimetype="application/json")
return resp
J'ai trouvé ce site Web utile: Implémentation d'une API Web RESTful avec Python Flask
Comme soulseekah remarqué, make_response est probablement une meilleure option dans ce cas. Définissez ensuite la propriété mimetype.
r = make_response( data )
r.mimetype = 'application/json'
return r
Si vous vous utilisez
from flask import jsonify
puis dans votre code
return jsonify(somedict)
puis jsonify () définit automatiquement le type mime sur 'application/json'
Éditer:
Cela était auparavant considéré comme un risque, mais pas plus, et Flask a également mis à jour sa recommandation: "ECMAScript 5 a corrigé cette vulnérabilité, donc seuls les navigateurs extrêmement anciens sont Tous ces navigateurs ont d'autres vulnérabilités plus graves, donc ce comportement a été modifié et jsonify () prend désormais en charge la sérialisation des tableaux. "http://flask.pocoo.org /docs/1.0/security/#json-security