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

Flask中return redirect引发请求重复循环问题求助

问题解决:DELETE请求后重复重定向及session未正确清空

问题根源

  1. 视图函数逻辑错误:原代码中每次访问/cart路由(无论GET还是DELETE),都会先执行session['order_list'] = {...},导致DELETE请求删除session后,重定向到GET时又会重新创建该数据,同时后端返回的重定向与前端fetch的JSON响应预期不匹配,引发循环问题。
  2. 前后端响应不兼容:后端DELETE请求返回重定向,但前端fetch期望JSON格式响应,不仅会触发解析错误,还无法自动刷新页面展示session清空后的状态。

修正后的代码

Flask后端代码

from flask import Flask, render_template, session, request, jsonify

app = Flask(__name__)
app.secret_key = 'THIS_IS_SECRET_KEY'


@app.route('/cart', methods=["GET", "DELETE"])
def cart():
    # 仅在GET请求且session无order_list时初始化数据,避免重复创建
    if request.method == "GET" and 'order_list' not in session:
        session['order_list'] = {
            'order_1': {'marker': True, 'color': 'blue'},
            'order_2': {'marker': True, 'color': 'red'},
            'order_3': {'marker': True, 'color': 'blue'}
        }

    if request.method == "GET":
        if 'order_list' in session:
            print(session['order_list'])
        else:
            print(session)
        return render_template('cart_order.html')

    elif request.method == "DELETE":
        if 'order_list' in session:
            session.pop('order_list')
            session.modified = True
        # 返回JSON响应告知前端删除结果
        return jsonify({"status": "success", "message": "Order list cleared"}), 200


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

前端HTML代码

<script>
  function clearQuery() {
    fetch("/cart", {
      method: "DELETE",
      headers: {
        "Content-Type": "application/json",
      },
    })
      .then((response) => {
        if (response.ok) {
          return response.json();
        }
        throw new Error("Network response was not ok.");
      })
      .then((data) => {
        console.log(data.message);
        // 删除成功后手动跳转刷新页面,获取最新session状态
        window.location.href = "/cart";
      })
      .catch((error) => {
        console.error("Error deleting orders", error);
      });
  }
</script>
<button onclick="clearQuery()">Clear Query</button>

关键修正点

  • 后端初始化逻辑调整:将session数据初始化限制在GET请求且数据不存在的场景,避免每次请求都重建session内容。
  • DELETE请求响应优化:返回JSON格式的成功响应,替代原有的重定向,适配前端fetch的处理逻辑。
  • 前端页面刷新:收到删除成功的响应后,通过window.location.href手动跳转到/cart,触发GET请求刷新页面,此时后端会打印已清空的session。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:41