You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用如何将/configs路由计算结果传递到/sumcollect路由并追加到列表

Flask跨路由传值实现方案

你现有代码存在三个核心问题:

  1. data 函数没有返回计算结果,运算后的值直接被丢弃
  2. sumcollect 路由内的value是局部变量,每次请求都会重新初始化,无法保留历史追加内容
  3. 两个路由对应独立的HTTP请求,Flask默认请求之间数据不互通,需要额外存储介质实现数据传递

基础实现(单进程开发测试场景)

仅适合本地开发、单worker启动的场景,使用全局变量做存储:

from flask import Flask

app = Flask(__name__)
# 全局存储value列表,初始化默认值
value = [10, 20]

def data(a,b):
    # 新增返回值,把计算结果透出
    return a + b

@app.route("/configs")
def configs():
    a = 10
    b = 20
    calc_result = data(a,b)
    # 声明要操作全局变量
    global value
    value.append(calc_result)
    return f"计算结果{calc_result}已追加到统计列表"

@app.route("/sumcollect")
def sumcollect():
    global value
    return f"当前value列表内容:{value}"

if __name__ == "__main__":
    app.run(debug=True)

注意:该方案在生产环境多worker启动时会出现数据不一致,不同进程的全局变量相互独立


生产环境通用实现

生产环境推荐用独立的共享存储服务,比如Redis,所有进程读写同一份数据,保证一致性:
首先安装依赖:
pip install flask redis
实现代码:

from flask import Flask
import redis

app = Flask(__name__)
# 初始化Redis连接,根据实际情况修改配置
r = redis.Redis(host='localhost', port=6379, db=0, decode_responses=True)
# 初始化value列表,不存在的话就写入默认值
if not r.exists("sum_value"):
    r.rpush("sum_value", 10, 20)

def data(a,b):
    return a + b

@app.route("/configs")
def configs():
    a = 10
    b = 20
    calc_result = data(a,b)
    # 往Redis列表尾部追加值
    r.rpush("sum_value", calc_result)
    return f"计算结果{calc_result}已追加到统计列表"

@app.route("/sumcollect")
def sumcollect():
    # 取出Redis中列表的所有元素
    value = r.lrange("sum_value", 0, -1)
    # 转换为数字类型
    value = [int(i) for i in value]
    return f"当前value列表内容:{value}"

if __name__ == "__main__":
    app.run(debug=True)

单用户隔离场景实现

如果需要每个用户的value列表互不干扰,可使用Flask自带的session存储:

from flask import Flask, session

app = Flask(__name__)
# 必须配置SECRET_KEY才能使用session功能
app.config["SECRET_KEY"] = "替换为你自己的加密密钥"

def data(a,b):
    return a + b

@app.route("/configs")
def configs():
    a = 10
    b = 20
    calc_result = data(a,b)
    # 初始化当前用户的value列表
    if "value" not in session:
        session["value"] = [10, 20]
    session["value"].append(calc_result)
    # 标记session已修改(修改列表内部元素时需要手动标记)
    session.modified = True
    return f"计算结果{calc_result}已追加到你的个人统计列表"

@app.route("/sumcollect")
def sumcollect():
    value = session.get("value", [10, 20])
    return f"你当前的value列表内容:{value}"

if __name__ == "__main__":
    app.run(debug=True)

内容的提问来源于stack exchange,提问作者Aniiya0978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:54:03