如何在 Flask Python 中以表格形式显示 csv 数据?

问题描述 投票:0回答:1

我正在使用 Flask 框架和 python 制作一个 Web 应用程序,我想让 Web 能够上传 csv,而无需使用我制作的模板在表格中保存和显示数据,我添加了用于上传和处理的语法数据直到它出现在表视图中,但运行网站后出现 404 未找到错误消息,我该如何修复它? 我在 main.py 中编写了代码

from datetime import datetime
from flask import Flask, render_template, request, session
from FlaskWebProject2 import app
import os
import pandas as pd
from werkzeug.utils import secure_filename

#*** Flask configuration
 
UPLOAD_FOLDER = os.path.join('staticFiles', 'uploads')

ALLOWED_EXTENSIONS = {'csv'}
 
app = Flask(__name__, template_folder='templateFiles', static_folder='staticFiles')

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
 
app.secret_key = 'This is your secret key to utilize session in Flask'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload',  methods=['POST', 'GET'])
def uploadFile():
    if request.method == 'POST':
        # upload file flask
        uploaded_df = request.files['uploaded-file']
 
        # Extracting uploaded data file name
        data_filename = secure_filename(uploaded_df.filename)
 
        # flask upload file to database (defined uploaded folder in static path)
        uploaded_df.save(os.path.join(app.config['UPLOAD_FOLDER'], data_filename))
 
        # Storing uploaded file path in flask session
        session['uploaded_data_file_path'] = os.path.join(app.config['UPLOAD_FOLDER'], data_filename)
 
        return render_template('index_upload_and_show_data_page2.html')

@app.route('/show_data')
def showData():
    # Retrieving uploaded file path from session
    data_file_path = session.get('uploaded_data_file_path', None)
 
    # read csv file in python flask (reading uploaded csv file from uploaded server location)
    uploaded_df = pd.read_csv(data_file_path)
 
    # pandas dataframe to html table flask
    uploaded_df_html = uploaded_df.to_html()
    return render_template('show_csv_data.html', data_var = uploaded_df_html)

我希望网站可以正常显示主页并上传、读取和显示csv数据

python html pandas csv flask
1个回答
1
投票

如果您请求

/upload
并得到 404。这是很自然的。您已为
/upload
端点添加了处理程序:

@app.route('/upload',  methods=['POST', 'GET'])
def uploadFile():
    ...

但是

uploadFile
仅支持
POST
请求。当您在浏览器中输入
localhost/upload
时,浏览器会向 Web 服务器发送
GET
请求。有两种解决方案可以为您提供相同的结果:

  1. if
    函数添加另一个
    uploadFile
    并检查传入请求是否为
    GET
    ,如果是,则显示一个页面(例如上传文件的表单)。

  2. 专门为

    upload_file_form
    请求显示表单编写另一个类似
    GET
    的函数。

P.S.:根据 PEP8,您应该使用

camel_case
作为函数名称。例如
upload_file
而不是
uploadFile

© www.soinside.com 2019 - 2024. All rights reserved.