此问题在此处已有答案:
How do I capture response of form.submit(20个答案)
8个月前关门了。
1.我有一个HTML页面正在使用FastAPI呈现:
@app.get("/index", response_class=HTMLResponse)
def write_home(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
Rendered HTML
上面的HTML有一个表单的Submit
按钮,它将导致端点\SWP
的POST请求
<form id="generate" action="swp" method="post" enctype="multipart/form-data">
1.它的工作方式就像我需要的那样--它将数据发布到我的Python计算器应用程序,后者返回一个JSON响应:
Output from Py App
1.通过将JSON文件保存在 * 本地硬盘 * 上,我可以编写JavaScript代码,该代码可以读取其数据并通过Chart.js创建一个图表。我使用了Fetch API,然后使用了对象数组:
const API_URL = "./Example_Response.json";
async function createChartAndTable() {
let ResponseFromAPI = await fetch(API_URL);
let JSON_Res = await ResponseFromAPI.json();
let JSON_Data1 = JSON.parse(JSON_Res.output.data);
From locally saved JSON file
1.现在,我完全困惑于如何使用Python应用程序http://127.0.0.1:8000/swp(Step2)的Live JSON结果,然后将其呈现为步骤1到http://127.0.0.1:8000/index中生成的HTML,就像我在步骤3中使用本地存储的JSON文件所做的那样。
注意:不涉及数据库。
如有任何指导和帮助,不胜感激。
2条答案
按热度按时间hsgswve41#
选项1
通过
HTML
表单发布请求,然后让API将您重定向到一个新页面(Jinja2Template
),在那里您可以读取数据并显示图表。正如@tiangolo在这里发布的,当执行RedirectResponse
从POST
请求路由到GET
请求路由时,response status code has to change到status_code=status.HTTP_303_SEE_OTHER
(下面的示例就是这样做的)。**更新:**此处不需要重定向。您可以像往常一样呈现模板:
选项2
使用
Fetch API
发布请求,接收JSON
数据并在同一页上显示图表。下面给出的示例演示了这两个选项(出于本演示的目的,使用的数据是示例数据;您可以根据需要更改/处理它们)。
应用程序.py
模板/索引.html
模板/图表.html
sq1bmfud2#
让它与下面的代码一起工作。像@傻瓜在他/她的一条评论中建议的技巧
我所做的是把我已经写好的JS代码放在“Todo句柄体”中。