最近有个需求,从数据库提取json,接口返回html,这里就涉及到用python生成个html,flask返回该html。
第一版做出来Json都在一起,看着很吃力,于是想用转化成json展开的格式。
实现方式:
- python 用str 拼一个html
- 用html 页面展示 json 样式
用html 页面展示 json 样式
<html>
</head> </head>
<body>
<script>
var str = {"name":"菜鸟教程", "site":"http://www.runoob.com"}
str_pretty2 = JSON.stringify(str, null, 4) //使用四个空格缩进
document.write("<pre>" + str_pretty2 + "</pre>" ); // pre 用于格式化输出
</script>
</body>
</html>
自己建个html,打开就是这样
下面是python实现:
body = '<html><style>pre {outline: 1px solid #ccc; } p {background-color: #C0C0C0; }</style></head><body><h3>test</h3<script>'
body = body + 'var row = {\"name\":\"菜鸟教程\", \"site\":\"http://www.runoob.com\"} ' + """
"""
body = body + 'row = JSON.stringify(row, null, 4)' + """
"""
body = body + 'document.write(\"<pre>\" + row+ \"</pre>\"); ' + """
"""
body = body + '</script></body></html>'
遇到的坑1:
一开始没有加""" ,html里的script生成都在一坨里面,大概就是这个样子
var str = {"name":"菜鸟教程", "site":"http://www.runoob.com"} str_pretty2 = JSON.stringify(str, null, 4) document.write("<pre>" + str_pretty2 + "</pre>" );
所以要换行,加了"""就好了
body = body + 'var row = {\"name\":\"菜鸟教程\", \"site\":\"http://www.runoob.com\"} ' + """
"""
遇到的坑2:
之前运行在python2.7上,最近部署了一台python3,又蹦了。
业务逻辑:post 接口将json 存入数据库, get 接口把数据库的json展示在页面上,检测下来数据库里 Json boolean 字段全成Ture,False,因为post插入数据库,json要转化成str,写进sql 里面,这就涉及到python json 和str 互转的问题。理论上 Json里面是ture,dict 里面是大写,不用json.dump() json,loads()基本就废了。
原代码:
@app.route('/set', methods=['POST'])
def post_Data():
api_value = request.args.get('api', '')
operateHandler = OperateManagement()
return operateHandler.saveResult(api_value, request.json, request.remote_addr)
修改后
@app.route('/set', methods=['POST'])
def post_Data():
api_value = request.args.get('api', '')
operateHandler = OperateManagement()
return operateHandler.saveResult(api_value, json.dumps(request.json), request.remote_addr)
然后就好了
记得import json
参考文档:
使用 Python 自动生成 HTML
https://blog.csdn.net/weixin_41697143/article/details/87607578
html页面展示Json样式
https://www.runoob.com/try/try.php?filename=tryjson_stringify