在视图中强制应用程序/ json MIME类型(Flask)

Jay*_*com 41 python json flask mime-types

我无法弄清楚如何强制application/jsonFlask中的视图的MIME类型.这是一个简单的视图,我为了演示目的而将它们拼凑在一起:

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

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

我已经看过"返回Json"文档这个 Stackoverflow问题,但到目前为止我还没有运气.我一直在寻找一段时间并将继续搜索,但我想我会问这里以防万一有人遇到过这个问题.

谢谢.


请参阅以下答案

解决方案:

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

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

    return resp
Run Code Online (Sandbox Code Playgroud)

我发现这个网站很有用:用Python和Flask实现RESTful Web API

Pro*_*ica 39

如果你使用

from flask import jsonify
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中

return jsonify(somedict)
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

  • @ahmetalpbalkan出于安全原因,您不应该在JSON服务中返回普通列表.因此,烧瓶使其故意困难.这里有详细记录:http://flask.pocoo.org/docs/security/#json-security (9认同)
  • 你怎么做阵列? (2认同)

Ada*_*ter 18

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

r = make_response( data )
r.mimetype = 'application/json'
return r
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,[`make_response`](http://flask.pocoo.org/docs/api/#flask.Flask.make_response)可能是更好的选择.然后设置`mimetype`属性.`r = make_response(data); r.mimetype ='application/json'; 返回r` (17认同)
  • 前面应该变成正确的答案! (2认同)