使用FastAPI创建可下载Excel文件的Web应用

在现代Web开发中,为用户提供下载功能是一项常见的需求。本教程将介绍如何使用FastAPI框架创建一个简单的Web应用,允许用户下载Excel文件。我们将演示如何生成Excel文件并将其作为响应发送给客户端。

创建FastAPI应用

首先,确保您已经安装了FastAPI库。如果没有安装,可以使用以下命令进行安装:

pip install fastapi

接下来,我们将创建一个FastAPI应用,其中包括一个路由,允许用户下载Excel文件。

from fastapi import FastAPI, Response
from fastapi.responses import StreamingResponse
import pandas as pd
import io
import xlsxwriter

app = FastAPI()

生成Excel文件

在我们的示例中,我们将创建一个简单的DataFrame,并将其转换为Excel文件。这个Excel文件将包含一些示例数据。

@app.get("/")
async def download_excel():
    # 生成一个简单的 DataFrame
    data = {"name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 35]}
    df = pd.DataFrame(data)

    # 将 DataFrame 转换为 Excel 文件
    buffer = io.BytesIO()
    workbook = xlsxwriter.Workbook(buffer)
    worksheet = workbook.add_worksheet()
    for i, col in enumerate(df.columns):
        worksheet.write(0, i, col)
        for j, value in enumerate(df[col]):
            worksheet.write(j + 1, i, value)
    workbook.close()

    # 将 Excel 文件转换为字节流,作为响应体返回给客户端
    buffer.seek(0)
    excel_bytes = buffer.getvalue()
    return StreamingResponse(
        io.BytesIO(excel_bytes),
        media_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        headers={"Content-Disposition": "attachment; filename=myfile.xlsx"}
    )

在上述代码中,我们首先创建了一个简单的DataFrame,然后使用xlsxwriter库将其转换为Excel文件。最后,我们将Excel文件转换为字节流,并将其作为响应的一部分返回给客户端。

运行FastAPI应用

要运行我们的FastAPI应用,您可以使用以下命令:

uvicorn main:app --host=127.0.0.1 --port=8000 --reload

确保将main替换为您的文件名(如果不是main.py),并选择适合您的主机和端口号。

使用您的Web应用

现在,您的FastAPI应用已经在本地运行,您可以通过浏览器或API客户端访问它。当您访问根路径(/)时,应用将生成一个包含示例数据的Excel文件,并将其作为下载提供。

结论

通过本教程,您学会了如何使用FastAPI框架创建一个简单的Web应用,允许用户下载Excel文件。这对于需要向用户提供数据报表或导出功能的Web应用程序非常有用。希望这个教程对您有所帮助,让您能够更好地理解如何使用FastAPI来处理文件下载功能。


请注意:本教程仅供学习和参考,不鼓励或支持任何侵犯版权或非法行为。请在合法的范围内使用Web开发技术。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

如何使用Python和Pyppeteer爬取动态网页数据

2023-11-26 11:08:19

指数词

如何使用Python将彩票数据存入数据库

2023-11-26 11:10:17

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索