html - 在自定义位置使用 FastAPI 将数据框下载为 excel
问题描述
我是 FastAPI 的新手,我需要了解是否有办法在系统中用户选择的位置下载 excel 格式的数据框。下面是我编写的示例代码,但是为了将数据帧下载为 excel,我必须在代码中对系统位置进行硬编码。
main.py 代码:
from fastapi import FastAPI, Request, Form
from pydantic import BaseModel
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
import uvicorn
import pandas as pd
app = FastAPI()
templates = Jinja2Templates(directory="htmlDirectory")
class NameValues(BaseModel):
Name : str = None
def save_to_excel(content, filename):
file = content.to_excel(r"E:\PycharmProjects"+"\\"+filename+".xlsx", index=False)
return file
@app.get("/home", response_class = HTMLResponse)
def home(request:Request):
return templates.TemplateResponse("introduction.html", {"request": request})
@app.post("/displayDF")
async def handle_df(request: Request, Name: str = Form(...), action: str = Form(...)):
if action == "Submit":
test_list = [["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]]
data = pd.DataFrame(data=test_list, columns=["Name", "Age", "Dept.", "Salary"])
return templates.TemplateResponse(
'df_representation.html',
{'request': request, 'data': data.to_html()}
)
if action == "Download":
test_list = [["Joe", 34, "Accounts", 10000], ["Jack", 34, "Chemistry", 20000]]
data = pd.DataFrame(data=test_list, columns=["Name", "Age", "Dept.", "Salary"])
save_to_excel(data, Name)
return "File Downloaded successfully"
if __name__ == '__main__':
uvicorn.run('main:app', host='0.0.0.0', port=8000)
df_representation.html 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>displayDF</title>
</head>
<body>
<h2>DataFrame representation:</h2>
<!-- You've to mark your data as safe,
otherwise it'll be rendered as a string -->
{{ data|safe }}
<form action="/displayDF" method="post">
<input type="text" name="Name">
<input type="submit" name="action" value="Download">
</form>
</body>
</html>
介绍.html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
</head>
<body>
<h2>Please enter a string in the space provided</h2>
<form action="/displayDF" method="post">
<input type="text" name="Name">
<input type="submit" name="action" value="Submit">
</form>
</body>
</html>
上面的代码工作正常,但唯一的问题是我在main.py文件的save_to_excel方法中硬编码了位置。我需要以这样一种方式更改代码,以便用户可以在系统中选择所需的位置,并让程序知道他们希望以 excel 格式下载数据帧的位置。提前感谢所有帮助!
解决方案
推荐阅读
- node.js - 纱线显示找不到命令
- asp.net-mvc - Net MVC Telerik 应用程序在 MS Edge 中出现 UI 问题
- javascript - 为什么 Google Chrome 和 Firefox 中不显示 base64 编码的图像?
- linux - 将通配符与“ls”一起使用
- java - BrowserStack 错误 - [browserstack.local] 设置为 true,但未连接通过 BrowserStack 进行的本地测试
- java - 使用 NetBeans 11.0 生成 .JAR 文件
- html - 是否可以真正禁用现代浏览器密码字段的自动填充和自动完成功能?
- visual-studio - VSCode 中的 Royale 设置
- wpf - WPF“'Grid'类型的值无法转换为'Control'
- php - 插入或删除时与 PDO 的 DB2 连接引发一般错误 -7008