Flask中return redirect引发请求重复循环问题求助
问题解决:DELETE请求后重复重定向及session未正确清空
问题根源
- 视图函数逻辑错误:原代码中每次访问
/cart路由(无论GET还是DELETE),都会先执行session['order_list'] = {...},导致DELETE请求删除session后,重定向到GET时又会重新创建该数据,同时后端返回的重定向与前端fetch的JSON响应预期不匹配,引发循环问题。 - 前后端响应不兼容:后端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
相关产品推荐
相关产品推荐

