Я Flask новичок, и в моем приложении есть следующая функция. Моя цель - чтобы пользователь мог читать файл .csv с помощью браузера. Затем раскрывающийся список в пользовательском интерфейсе заполняется с использованием столбцов фрейма данных, и пользователь выбирает столбец из раскрывающегося списка, а затем выполняется статистика c по выбранному столбцу (например, вычисляется среднее значение на данный момент).
Я хочу, чтобы данные сохранялись в сеансе, чтобы они были доступны пользователю, пока он использует веб-приложение. Когда они выйдут из системы, он исчезнет go. Когда я пытаюсь сохранить данные в session["df"] = orig_df
, я получаю сообщение об ошибке: «Объект типа DataFrame не JSON сериализуемый». Итак, я мог бы session["df"] = orig_df.to_json()
, но тогда это уже не прямоугольный angular фрейм данных, который я предпочитаю.
Мои вопросы:
1) Правильно ли я, что данные должны храниться в сеансе, чтобы их можно было использовать во время сеанса браузера (то есть загружать один раз и повторно использовать для нескольких вычислений / графиков), и если это так, я делаю это правильно.
2) Данные могут поддерживаться в сеансе как прямоугольный angular фрейм данных.
Если я ошибаюсь в обоих, какие варианты мне следует изучить или рассмотреть для этой задачи?
from flask import Flask, render_template, request, session
import pandas as pd
app = Flask(__name__)
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
app.secret_key = 'abc'
@app.route('/dataTools', methods=['POST', 'GET'])
def data_tools_upload():
if request.method == 'POST':
orig_df = pd.read_csv(request.files.get('file'))
session["df"] = orig_df
vars = list(orig_df.columns)
var2use = request.form.get("var2use")
mean = orig_df[vars[4]].mean()
dims = orig_df.shape
message = 'You have data! There are %s rows and %s columns and the variable %s has mean %s' % (dims[0],dims[1],vars[4],round(mean,3))
table = orig_df.head(10).to_html(classes='data', header = "true")
return render_template('upload.html', tables = [table], message = orig_df, vars = vars, name = var2use)
var2use = request.form.get("name")
return render_template('upload.html', name = var2use)