Flask服务器端文件会话管理

2024-09-26 22:07:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正准备部署我的第一个Flask应用程序。它现在在本地运行,但需要为多个同时的用户场景做好准备。下面是代码的完整部分(这是一个蓝图),显示了我正在尝试的方法

这里发生的是用户读取数据文件,该文件临时存储在临时目录中。我想要做的是部署时,创建一个临时目录,该目录对于每个新的浏览器会话都是唯一的。然后,同样的过程也会发生(上传文件,将该文件保存在temp中,等等)

如果发生这种情况,我认为用户不会发生冲突。下面我尝试使用一个会话变量,但这是正确的方法吗?有没有更好的规范化方法的建议

from flask import Flask, render_template, request, session, Blueprint
from flask_session import Session
import numpy as np
from scipy.stats import binom, norm  
from scipy.optimize import minimize
from scipy import optimize 
import pandas as pd 
import os 
import tempfile
import Datatools.code as dt 
from Datatools.forms import dtFormRadio
from werkzeug.utils import secure_filename

data_tools = Blueprint("data_tools", __name__)

@data_tools.route('/dataTools', methods=['POST', 'GET'])
def data_tools_upload():
    session["SESSION_FILE_DIR"] = tempfile.gettempdir() ### Just a test
    table = '<table></table>' 
    result = '<table></table>' 
    message = ''
    var2use = None 
    vars = ''
    dt_name = ''
    dtRadios = dtFormRadio(request.form)
    if request.method == 'POST':
        tmp_filename = session["SESSION_FILE_DIR"] +'\\input.csv' ### Just a test
        if request.files:
            to_upload = request.files.get('file')
            dt_name = str(to_upload).split()[1]
            if to_upload:
                f = request.files['file']
                f.save(tmp_filename)
        if os.path.exists(tmp_filename):
            orig_df = pd.read_csv(tmp_filename)
            vars = list(orig_df.columns)
            dtRadios.varlist.choices = vars 
            var2use = dtRadios.varlist.data 
            if var2use != None:
                indx = vars.index(var2use)
                if dtRadios.dtRadioList.data == 'descriptives':
                    result = dt.get_descriptives(orig_df[vars[indx]])
                if dtRadios.dtRadioList.data == 'percentiles':
                    result = dt.get_percentiles(orig_df[vars[indx]])
                if dtRadios.dtRadioList.data == 'frequency':
                    if dtRadios.binSize.data != None:
                        bins = dtRadios.binSize.data
                    result = dt.get_frequency(orig_df[vars[indx]], bins = bins)
                result = pd.DataFrame.from_dict(result, orient='index', columns = [var2use]).to_html(classes='table table-striped table-hover', header = "true", justify = "center")
            dims = orig_df.shape
            message = 'Data file %s with %s rows and %s columns loaded.' % (dt_name, dims[0],dims[1])
            table = orig_df.head(10).to_html(classes='data', header = "true")
    return render_template('dataTools.html', results = [result], message = message, vars = vars, var_name = var2use, dtForm=dtRadios)

Tags: namefromimportdfdataifrequestdt

热门问题