Flask视图无法展示JSON数据,返回Response 14 bytes [200 OK]问题
问题分析与修复方案
你的代码存在两个核心问题:
1. jsonify() 返回的是 Response 对象,而非可渲染的数据
jsonify(data1) 会生成一个 Flask 的 Response 实例(用于直接返回给客户端的HTTP响应载体),不是JSON字符串或字典。当你把这个对象传给 render_template,模板会直接输出该对象的字符串表示,也就是你看到的 <Response 14 bytes [200 OK]>。
2. GET 请求通常无法获取 JSON 数据
request.get_json() 是从请求体中解析JSON内容,但GET请求默认没有请求体——客户端几乎不会在GET请求中发送JSON数据,因此这里的 data1 大概率为 None。
修复代码
方案1:改用POST请求接收JSON(推荐,符合HTTP规范)
如果需要接收JSON数据,POST请求是更合理的选择:
import json from flask import Flask, request, render_template @app.route('/prediction', methods=['GET','POST']) def predict(): data = None if request.method == 'POST': # 从POST请求体解析JSON数据 data = request.get_json() # 将数据转为格式化的JSON字符串传给模板 return render_template('index.html', data=json.dumps(data, indent=2) if data else "No JSON data received")
对应的HTML模板(用pre标签保留JSON格式):
<!DOCTYPE html> <html lang="en"> <head> <title>Prediction Test</title> </head> <body> <pre>{{ data }}</pre> </body> </html>
方案2:若必须用GET请求,改用查询参数传递数据
如果业务场景确实需要GET请求,应通过URL查询参数传递数据,而非JSON:
from flask import Flask, request, render_template @app.route('/prediction', methods=['GET','POST']) def predict(): # 获取所有查询参数并转为字典 data = request.args.to_dict() return render_template('index.html', data=data)
HTML模板可直接渲染或遍历字典:
<!DOCTYPE html> <html lang="en"> <head> <title>Prediction Test</title> </head> <body> <div>原始数据:{{ data }}</div> <!-- 遍历展示键值对 --> {% for key, value in data.items() %} <p>{{ key }}: {{ value }}</p> {% endfor %} </body> </html>
内容的提问来源于stack exchange,提问作者Amanda Choy Siew Wen
相关产品推荐
相关产品推荐

