web-dev-qa-db-fra.com

Forcer le type d'application / json MIME dans une vue (Flask)

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

36
JayQuerie.com

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
17
Adam Baxter

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

37
Prof. Falken