首页 > 解决方案 > 在自定义位置使用 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 格式下载数据帧的位置。提前感谢所有帮助!

标签: htmlpython-3.xfastapi

解决方案


推荐阅读