【问题标题】:Forcing application/json MIME type in a view (Flask)在视图中强制应用程序/json MIME 类型(Flask)
【发布时间】:2012-08-10 08:16:15
【问题描述】:

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

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

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

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

谢谢。


answer below

解决办法:

@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

【问题讨论】:

    标签: python json mime-types flask


    【解决方案1】:

    如果你使用:

    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

    【讨论】:

    • 你为数组做什么?
    • 不,我的意思是您发送 JSON 数组响应是做什么的? (假设我有一个 Python 数组,我会将其渲染为以 [ 开头并以 ] 结尾的 JSON 数组。那你会怎么做?
    • 试试 jsonify([1,2,3]) 它会给你错误。 jsonify(somearr) 不存在。
    • @ahmetalpbalkan 出于安全原因,您不应在 JSON 服务中返回纯列表。所以烧瓶故意让它变得困难。这在此处详细记录:flask.pocoo.org/docs/security/#json-security
    • Flask 现在改变了它的建议:"ECMAScript 5 关闭了这个漏洞,所以只有非常老的浏览器仍然容易受到攻击。所有这些浏览器都有其他更严重的漏洞,所以这个行为被改变了jsonify() 现在支持序列化数组。" flask.pocoo.org/docs/1.0/security/#json-security @AhmetAlpBalkan
    【解决方案2】:

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

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

    【讨论】:

    • make_response 在这种情况下可能是更好的选择。然后设置mimetype 属性。 r = make_response( data ); r.mimetype = 'application/json'; return r
    • 前面应该变成正确答案!
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多