如何通过Flask实现点击链接展示CSV文件内容?
实现Flask点击链接展示CSV文件内容的方案
问题修正与核心实现思路
你当前的HTML模板已经生成了跳转链接,但存在两个小问题:循环内未闭合<tr>标签、行号固定为1;另外缺少对应的Flask视图函数处理CSV内容的读取与展示。以下是完整实现步骤:
步骤1:修复HTML模板
{% extends 'base.html' %} {% block title %}Home{% endblock %} {% block content %} <br /> <table class="table table-bordered table-hover"> <caption> Files Uploaded</caption> <tr> <th class="table-light"> # </th> <th class="table-light">File Name</th> <th class="table-light">Date</th> <th class="table-light">Access Data</th> </tr> {% for file in csv_file %} <tr> <th scope="row">{{ loop.index }}</th> <td>{{ file.data }}</td> <td>{{ file.date }}</td> <td><a href="{{ url_for('views.data_analytics', filename=file.data) }}">View Data</a></td> </tr> {%endfor%} </table> {% endblock %}
注:补上了循环内缺失的</tr>标签,将固定行号改为loop.index实现动态编号,同时把URL参数名改为更清晰的filename。
步骤2:编写Flask视图函数
在views.py中添加以下代码,负责读取CSV文件并渲染到页面:
from flask import render_template, request, abort import csv import os # 替换为你实际存储上传CSV文件的目录,确保该目录存在且有读取权限 UPLOAD_FOLDER = 'your/upload/directory/path' @views.route('/data-analytics') def data_analytics(): # 获取URL中的文件名参数 filename = request.args.get('filename') if not filename: abort(400, description="缺少文件名参数") # 构造安全的文件路径,防止路径遍历攻击 file_path = os.path.join(UPLOAD_FOLDER, filename) # 校验文件合法性 if not os.path.exists(file_path) or not filename.endswith('.csv'): abort(404, description="文件不存在或不是CSV格式") # 读取CSV内容 csv_content = [] with open(file_path, 'r', encoding='utf-8') as f: csv_reader = csv.reader(f) for row in csv_reader: csv_content.append(row) # 渲染CSV内容页面 return render_template('csv_view.html', filename=filename, csv_data=csv_content)
步骤3:创建CSV内容展示模板
新建csv_view.html文件,用于格式化展示CSV数据:
{% extends 'base.html' %} {% block title %}{{ filename }}{% endblock %} {% block content %} <h2 align="center">{{ filename }} 文件内容</h2> <br> <table class="table table-bordered table-hover"> {% for row in csv_data %} <tr> {% for cell in row %} <td>{{ cell }}</td> {% endfor %} </tr> {% endfor %} </table> {% endblock %}
关键注意事项
- 路径安全:必须使用
os.path.join构造文件路径,禁止直接拼接用户传入的文件名,避免路径遍历攻击(如用户传入../secret.txt)。 - 权限校验:确保Flask运行进程对
UPLOAD_FOLDER目录有读取权限。 - 错误处理:添加参数缺失、文件不存在、非CSV文件的错误拦截,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Alexandru_Ghi
相关产品推荐
相关产品推荐

