我有一个使用 Flask 框架的 python 服务器。
我的应用程序是一个聊天机器人,它与用户对话并在用户提供的数据集中执行一些计算。
我已经能够将此数据上传到服务器,但是当我尝试使用该数据时,它不再加载。因此,我需要使用这些数据,直到用户与我的服务器断开连接。
阅读 Flask 文档,我发现了一些可以引导我找到我需要的信息。 The Application Context
我的方向正确吗?
这就是我在服务器中上传文件的方式:
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
# check if the post request has the file part
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
# if user does not select file, browser also
# submit a empty part without filename
if file.filename == '':
flash('No selected file')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
stream = io.StringIO(file.stream.read().decode("UTF8"), newline=None)
csv_input = pd.read_csv(stream,sep=None,engine='python')
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
session['receive_count'] = session.get('receive_count', 0) + 1
return render_template('index.html', async_mode=socketio.async_mode)
return render_template('index.html', async_mode=socketio.async_mode)
您的问题有多种解决方案。
首先,这里的 file
变量是 index()
函数的本地变量。如果您想使用在函数外部定义的变量(并且它不像 request
和 session
那样导入),您需要使用 global 行启动该函数文件
。
我会将文件名存储在session
中,然后在需要数据时再次读取该文件。这样,它将位于用户本地,并且您不会在内存中存储大量数据。另外,如果您使用 session.permanent = True
,无论服务器和浏览器是否重新启动,它都会为该“用户”存储一个月。
编辑:这个答案最初指出你可以使用 Flask g
-object 来存储全局。但是,g
对象对于请求来说是本地的,即使它存在于应用程序上下文中。 (即存储在 g
对象上的数据无法跨请求访问,只能在同一请求内访问)
我是一名优秀的程序员,十分优秀!