【发布时间】:2020-12-25 10:05:35
【问题描述】:
我正在构建一个简单的烧瓶应用程序,jsonify() 在我的本地主机上运行良好,它将以 json 格式返回带有新行和正确缩进的信息,但是当在 heroku 上运行完全相同的代码时,它会省略新行和缩进
This is how it looks on my localhost 和 this 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