53

我不知道如何为application/jsonFlask 中的视图强制使用 MIME 类型。这是我为演示目的而汇总的一个简单视图:

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

JSON字符串(保存在变量中ret)是从其他地方收集的(使用来自另一个程序的stdout subprocess),所以我不能使用jsonifyFlask提供的。

我已经查看了“Returning Json”文档这个Stackoverflow 问题,但到目前为止我还没有运气。我已经四处寻找了一段时间,并将继续搜索,但我想我会在这里问一下,以防万一有人遇到这个问题。

谢谢。


请看下面的答案

解决方案:

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

    resp = Response(response=ret,
                    status=200,
                    mimetype="application/json")

    return resp

我发现这个网站很有用:Implementing a RESTful Web API with Python & Flask

4

2 回答 2

48

如果您使用:

from flask import jsonify

然后在您的代码中:

return jsonify(somedict)

然后 jsonify() 自动将 mime 类型设置为 'application/json'

编辑:

以前被认为是一种风险,但现在不再存在了,Flask 也更新了它的建议:“ECMAScript 5 关闭了这个漏洞,所以只有非常旧的浏览器仍然容易受到攻击。所有这些浏览器都有其他更严重的漏洞,所以这个行为被改变了并且 jsonify() 现在支持序列化数组。” http://flask.pocoo.org/docs/1.0/security/#json-security

于 2012-09-05T11:11:09.910 回答
31

就像soulseekah注意到的那样,在这种情况下,make_response可能是一个更好的选择。然后设置 mimetype 属性。

r = make_response( data )
r.mimetype = 'application/json'
return r
于 2012-08-14T04:06:24.497 回答