You need to enable JavaScript to run this app. Python Flask中如何在GET请求中获取此前POST请求传入的数据
优惠活动
大模型
产品
解决方案
定价
更多

Python Flask中如何在GET请求中获取此前POST请求传入的数据

问题根源

HTTP协议是无状态的,你在POST请求分支中定义的create_row_data是视图函数的局部变量,单次请求处理完成后,该变量会随请求上下文一同销毁,GET请求是完全独立的新请求,自然无法直接读取之前POST请求产生的变量值。

可行解决思路

方案1:使用Flask自带session存储(适合小体量非敏感数据,快速实现)

Flask的session默认将数据加密后存储在客户端Cookie中,可实现同一客户端跨请求的数据共享。
修改后的代码示例:

from flask import Flask, jsonify, request, session # 导入session
import json

app = Flask(__name__)
app.config['SECRET_KEY'] = '替换为你自己的随机加密字符串' # 必须配置,用于加密session数据

@app.route('/', methods=['GET', 'POST'])
def get_data():
   if request.method =='POST':
      data = request.get_json()
      p_name = data['name']
      p_type = data['type']
      p_end = data['end']
      p_step = data['step']
      create_row_data = {'p_name': str(p_name), 'p_type': str(p_type), 'p_end': str(p_end), 'p_step': str(p_step)}
      # 将数据存入session
      session['create_row_data'] = create_row_data
      return jsonify(create_row_data)
   if request.method == 'GET':
      # 从session读取数据
      create_row_data = session.get('create_row_data')
      if create_row_data:
          # 此处加入你生成表格的逻辑
          return jsonify(create_row_data)
      return "未找到对应数据,请先发送POST请求", 404

方案2:服务端缓存存储(适合生产环境、数据量大、多实例部署场景)

如果需要支持多用户访问、多进程/多worker部署,推荐使用Redis作为中间缓存存储:

  1. 先安装依赖:pip install redis
  2. 代码示例:
from flask import Flask, jsonify, request
import redis, json

app = Flask(__name__)
# 初始化redis连接
redis_client = redis.Redis(host='127.0.0.1', port=6379, db=0, decode_responses=True)

@app.route('/', methods=['GET', 'POST'])
def get_data():
   # 用客户端的session id作为唯一key,区分不同用户的数据
   user_key = f"user_data:{request.cookies.get('session', 'default')}"
   if request.method =='POST':
      data = request.get_json()
      p_name = data['name']
      p_type = data['type']
      p_end = data['end']
      p_step = data['step']
      create_row_data = {'p_name': str(p_name), 'p_type': str(p_type), 'p_end': str(p_end), 'p_step': str(p_step)}
      # 将数据转为json字符串存入redis,设置1小时过期
      redis_client.setex(user_key, 3600, json.dumps(create_row_data))
      return jsonify(create_row_data)
   if request.method == 'GET':
      data_str = redis_client.get(user_key)
      if data_str:
          create_row_data = json.loads(data_str)
          # 此处加入你生成表格的逻辑
          return jsonify(create_row_data)
      return "未找到对应数据,请先发送POST请求", 404

方案3:全局变量临时测试(仅本地单进程测试用,禁止生产使用)

如果只是本地临时测试,且只有单进程单worker运行,可以用全局变量存储,缺点是多请求并发会出现数据串扰,服务重启后数据清空,多worker部署时无法共享数据:

from flask import Flask, jsonify, request
import json

app = Flask(__name__)
# 定义全局变量存储数据
global_row_data = None

@app.route('/', methods=['GET', 'POST'])
def get_data():
   global global_row_data
   if request.method =='POST':
      data = request.get_json()
      p_name = data['name']
      p_type = data['type']
      p_end = data['end']
      p_step = data['step']
      create_row_data = {'p_name': str(p_name), 'p_type': str(p_type), 'p_end': str(p_end), 'p_step': str(p_step)}
      global_row_data = create_row_data
      return jsonify(create_row_data)
   if request.method == 'GET':
      if global_row_data:
          # 此处加入你生成表格的逻辑
          return jsonify(global_row_data)
      return "未找到对应数据,请先发送POST请求", 404
注意事项
  • 方案1的默认session存储在客户端,不要存储敏感信息,若需要存储敏感数据可以使用flask-session扩展改用服务端存储session
  • 生产环境优先选择方案2,Redis的过期时间可以根据你的业务需求调整
  • 如果需要长期存储数据,可以将数据存入MySQL、SQLite等关系型数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:48:03