Toepassing/json MIME-type forceren in een weergave (Flask)

Ik kan er niet achter komen hoe ik het MIME-type application/jsonmoet forceren voor een weergave in Flask. Hier is een eenvoudige weergave die ik heb samengesteld voor demonstratiedoeleinden:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'
    return ret

De JSON-tekenreeks (vastgehouden in variabele ret) wordt van elders verzameld (met behulp van stdout van een ander programma met behulp van subprocess), dus ik kan jsonifygeleverd bij Flask.

Ik heb de “Returning Json”-documentatiebekeken en dezeStackoverflow-vraag, maar ik heb tot nu toe geen geluk gehad. Ik ben al een tijdje aan het rondkijken & zal doorgaan met zoeken, maar dacht ik vraag het hier voor het geval iemand dit is tegengekomen.

Bedankt.


Zie het antwoord hieronder

De oplossing:

@app.route("/")
def testView():
    ret = '{"data": "JSON string example"}'
    resp = Response(response=ret,
                    status=200,
                    mimetype="application/json")
    return resp

Ik vond deze website nuttig: Een RESTful Web API implementeren met Python & Kolf


Antwoord 1, autoriteit 100%

Als je het volgende gebruikt:

from flask import jsonify

en dan in je code:

return jsonify(somedict)

vervolgens stelt jsonify() automatisch het mime-type in op ‘application/json’

Bewerken:

Dit werd voorheenals een risico beschouwd, maar nu niet meer, en Flask heeft ook zijn aanbeveling bijgewerkt: “ECMAScript 5 heeft deze kwetsbaarheid gesloten, dus alleen extreem oud browsers zijn nog steeds kwetsbaar. Al deze browsers hebben andere, meer ernstige kwetsbaarheden, dus dit gedrag is gewijzigd en jsonify() ondersteunt nu serialisatie van arrays.”http://flask.pocoo.org/docs/1.0/security/#json-security


Antwoord 2, autoriteit 65%

Zoals soulseekahopgemerkt, make_responseis in dit geval waarschijnlijk een betere optie. Stel vervolgens de eigenschap mimetype in.

r = make_response( data )
r.mimetype = 'application/json'
return r

Other episodes