【问题标题】:flask, Jsonify not pretty prints on Heroku烧瓶,Jsonify 在 Heroku 上打印不漂亮
【发布时间】:2020-12-25 10:05:35
【问题描述】:

我正在构建一个简单的烧瓶应用程序,jsonify() 在我的本地主机上运行良好,它将以 json 格式返回带有新行和正确缩进的信息,但是当在 heroku 上运行完全相同的代码时,它会省略新行和缩进 This is how it looks on my localhostthis is on heroku

jsonify() 的文档中提到了这一点

如果 JSONIFY_PRETTYPRINT_REGULAR 配置参数设置为 True 或 Flask 应用程序在调试模式下运行,此函数的响应将被很好地打印出来

我都设置了

app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
app.run(debug=True)

我尝试手动将内容类型设置为 application/json,但这没有帮助,我什至尝试使用 json.dumps() 并得到相同的结果

return jsonify(data), 200, {'Content-Type': 'application/json; charset=utf-8'}

关于什么可能导致 heroku 打印效果不佳的任何输入?

编辑:

from flask import request, jsonify, Flask


app = Flask(__name__)

@app.route('/test', methods = ['GET'])
def test():
   test_dict = {"Key1": "Value1", "Key2": ["Value2","Value2","Value2",]}
   print(jsonify(test_dict).headers)
   return jsonify(test_dict)

if __name__ == '__main__':
    app.run(debug=True)

这个简单的烧瓶应用程序可以很好地打印在我的本地主机上,就像上面链接的照片一样,但是在 heroku 上它不会。看起来它正在返回纯文本。可以在这里看到https://jojoapi.herokuapp.com/test。 我正在使用 gunicorn,不确定这是否对输出有任何影响

编辑 2

所以,我按照 cmets app.config["DEBUG"] = True 中的建议将手动调试设置为 True,现在它可以在 heroku 上正常运行

【问题讨论】:

  • server 可能会以您期望的不同方式运行它 - 它可能会导入 app 并使用自己的参数运行它 - 而不是使用您的 app.run(debug=True) - 如果您想要漂亮的输出,那么最好转换为文本或 HTML 并发送此文本 HTML。或者您可能必须以不同的方式设置debug - 可能是app.config["DEBUG"] = True
  • 您也可以将jsonify(data) 保存在文件中,稍后查看它是否创建格式。您也可以检查jsonify(data) 之前的配置,看看它是否有正确的设置。您甚至可以尝试在jsonify(data) 之前直接设置新设置。顺便说一句:您可以将两个结果都保存在网络浏览器中的文件中,并检查两者是否具有相同的格式。
  • 顺便说一句:您可以添加最少的工作代码 - 这样我们就可以运行它 - 以及 heroku 上工作代码的 URL - 这样我们就可以看到它发送的内容。
  • 感谢@furas 的回复,我已经用一些简单的测试代码编辑了上面的帖子,我在本地主机和heroku 上都运行了,这是heroku jojoapi.herokuapp.com/test 上的输出。 Heroku 日志也在打印 Content-Type: application/json 另外,不确定它是否加起来,这是项目的 repo github.com/itzsylex/jojoAPI
  • 我刚刚设置了debug,就像您建议的app.config["DEBUG"] = True 一样,它正在正常工作。谢谢!

标签: python flask heroku jsonify


【解决方案1】:

某些服务器(不仅是 Heroku)可能不会直接运行您的脚本并且不会执行 app(debug=True),但它们可能会将 app 导入到自己的代码中并使用自己的参数运行它 app(...own args...) - 这可能会产生问题。

您可以通过不同的方法在代码中设置调试模式。

app.config["DEBUG"] = True

最终你可以尝试在Linux中设置环境变量

export FLASK_DEBUG=1

export FLASK_ENV=development

见文档:Debug Mode

Flask 文档:Standalone WSGI Containers - 它显示了导入 app(如 myproject:app)的服务器,它们可以使用自己的参数运行。

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2014-08-13
    • 2016-07-07
    • 2014-05-19
    相关资源
    最近更新 更多