我使用FastAPI上传一个csv文件,对它进行一些修改,然后将它返回到HTML页面。我使用Jinja2作为模板引擎,在前端使用HTML。
如何使用Jinja2模板上传csv文件,修改后返回给客户端?
Python代码
from fastapi.templating import Jinja2Templates
from fastapi import FastAPI, File, UploadFile, Request
from io import BytesIO
import pandas as pd
import uvicorn
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/")
def form_post(request: Request):
result = "upload file"
return templates.TemplateResponse('home.html', context={'request': request, 'result': result})
@app.post("/")
def upload(request: Request, file: UploadFile = File(...)):
contents1 = file.file.read()
buffer1 = BytesIO(contents1)
test1 = pd.read_csv(buffer1)
buffer1.close()
file.file.close()
test1 = dict(test1.values)
return templates.TemplateResponse('home.html', context={'request': request, 'result': test1})
if __name__ == "__main__":
uvicorn.run(app)
HTML代码
\<!DOCTYPE html\>
\<html lang="en"\>
\<head\>
\<meta charset="UTF-8"\>
\<title\>RUL_PREDICTION\</title\>
\</head\>
\<body\>
\<h1\>RUL PREDICTION\</h1\>
\<form method="post"\>
\<input type="file" name="file" id="file"/\>
\<button type="submit"\>upload\</button\>
\</form\>
\<p\>{{ result }}\</p\>
\</body\>
\</html\>
2条答案
按热度按时间7uhlpewt1#
下面的工作示例源自答案here、here以及here、here和here,我建议您查看这些答案以了解更多详细信息和说明。
示例数据
数据.csv
选项1 -在新CSV文件中返回修改的数据
应用程序.py
模板/索引.html
选项2 -在新的Jinja 2模板中返回修改的数据
如果您希望返回一个包含修改后数据的新Jinja 2模板,而不是上面演示的csv文件,您可以使用下面的。
方法1
使用
pandas.DataFrame.to_html()
将DataFrame呈现为HTML表。您可以选择在to_html()
函数中使用classes
参数来传递class
名称或名称列表,这些名称将在前端的样式表中用于设置表的样式。此外,您可以通过在to_html()
中指定border=0
来删除border
。应用程序.py
模板/结果.html
方法二
使用
pandas.DataFrame.to_dict()
将DataFrame转换为字典并返回它。应用程序.py
模板/结果.html
fv2wmkja2#
以下方法可能有效: