如何利用Flask框架生成报表?

小贝
预计阅读时长 14 分钟
位置: 首页 小红书 正文

使用 Flask 绘制报表

flask画报表

Flask 是一个轻量级的 Python Web 框架,非常适合快速开发和部署小型到中型的 Web 应用,在数据分析和展示领域,生成动态的报表是一项常见需求,本文将介绍如何使用 Flask 来绘制和展示报表。

1. 环境准备

确保你的开发环境中安装了 Flask 和其他必要的库:

pip install flask matplotlib pandas

Flask: Web 框架

Matplotlib: 绘图库

Pandas: 数据处理库

2. 创建 Flask 应用

flask画报表

创建一个基本的 Flask 应用结构:

my_flask_app/
├── app.py
├── templates/
│   └── index.html
├── static/
│   └── style.css
└── data/
    └── data.csv

app.py 是主应用程序文件,templates 目录用于存放 HTML 模板,static 目录用于存放静态文件(如 CSS、JS),data 目录用于存放数据文件。

3. 编写app.py

以下是一个简单的app.py 示例:

from flask import Flask, render_template, request, jsonify
import pandas as pd
import matplotlib.pyplot as plt
import io
import base64
app = Flask(__name__)
@app.route('/')
def index():
    return render_template('index.html')
@app.route('/generate_report', methods=['POST'])
def generate_report():
    data_file = 'data/data.csv'
    df = pd.read_csv(data_file)
    
    figure, ax = plt.subplots()
    ax.bar(df['Category'], df['Value'])
    ax.set_title('Category vs Value')
    ax.set_xlabel('Category')
    ax.set_ylabel('Value')
    
    img = io.BytesIO()
    plt.savefig(img, format='png')
    img.seek(0)
    plot_url = base64.b64encode(img.getvalue()).decode()
    
    return jsonify({'plot_url': f'data:image/png;base64,{plot_url}'})
if __name__ == '__main__':
    app.run(debug=True)

代码解释

1、导入库: 导入 Flask、Pandas、Matplotlib 以及其他需要的库。

2、初始化 Flask 应用: 创建 Flask 应用实例。

3、主页路由: 定义一个/ 路由,渲染index.html 模板。

flask画报表

4、生成报表路由: 定义一个/generate_report 路由,处理 POST 请求,读取数据文件并生成图表。

5、读取数据: 使用 Pandas 读取 CSV 文件数据。

6、绘制图表: 使用 Matplotlib 绘制柱状图。

7、保存图表为图像: 将图表保存为 PNG 格式,并转换为 Base64 编码字符串。

8、返回结果: 将图表作为 JSON 响应返回前端。

4. 编写index.html

以下是一个简单的index.html 示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flask Report</title>
    <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
    <h1>Generate Report</h1>
    <form id="report-form">
        <input type="submit" value="Generate">
    </form>
    <div id="report"></div>
    <script>
        document.getElementById('report-form').onsubmit = async (e) => {
            e.preventDefault();
            let response = await fetch('/generate_report', { method: 'POST' });
            let result = await response.json();
            document.getElementById('report').innerHTML =<img src="${result.plot_url}" alt="Plot">;
        };
    </script>
</body>
</html>

代码解释

1、表单提交: 当用户点击 "Generate" 按钮时,触发表单提交事件。

2、异步请求: 使用 Fetch API 发送 POST 请求到/generate_report 路由。

3、处理响应: 解析 JSON 响应,并将图表图像插入到页面中。

5. 运行应用

在终端中运行以下命令启动 Flask 应用:

python app.py

访问http://127.0.0.1:5000/,你将看到一个带有 "Generate" 按钮的页面,点击按钮后,页面将显示从数据文件中生成的图表。

相关问题与解答

问题 1:如何更改数据源?

解答:你可以修改data_file 变量的值来指定不同的数据文件路径,如果你想使用 JSON 文件作为数据源,可以修改如下:

import json
@app.route('/generate_report', methods=['POST'])
def generate_report():
    data_file = 'data/data.json'
    with open(data_file, 'r') as f:
        data = json.load(f)
    df = pd.DataFrame(data)
    ...

问题 2:如何自定义图表类型?

解答:你可以根据需要选择不同的 Matplotlib 图表类型,如果你想绘制折线图而不是柱状图,可以修改如下:

@app.route('/generate_report', methods=['POST'])
def generate_report():
    data_file = 'data/data.csv'
    df = pd.read_csv(data_file)
    
    figure, ax = plt.subplots()
    ax.plot(df['Category'], df['Value'])  # 使用 ax.plot() 绘制折线图
    ax.set_title('Category vs Value')
    ax.set_xlabel('Category')
    ax.set_ylabel('Value')
    ...

以上就是关于“flask画报表”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!

-- 展开阅读全文 --
头像
如何构建Flink实时数据仓库项目?
« 上一篇 2024-12-13
Flutter开发工具有哪些?如何选择最适合你的?
下一篇 » 2024-12-13
取消
微信二维码
支付宝二维码

发表评论

暂无评论,1人围观

目录[+]