为什么flask session 购物车数量不更新?
问题描述
我在尝试使用flask session 实现购物车的功能,源代码如下:
from flask import Flask, session, requestapp = Flask(__name__)
app.secret_key = 'secret'
@app.route('/')
def hello_world():
return "<p>Hello, World!</p>"
@app.route('/cart')
def cart():
if 'cart' in session:
# 如果购物车存在就输出购物车
print(session['cart'])
return 'cart'
@app.route('/add-to-cart', methods=('GET', 'POST'))
def add_to_cart():
product_id = request.form.get('product_id')
product_quantity = int(request.form.get('product_quantity'))
print(product_id, product_quantity)
if 'cart' not in session:
# 初始化购物车
session['cart'] = {}
if product_id not in session['cart']:
# 将商品添加到购物车
session['cart'][product_id]={'pdoct_id':product_id, 'product_quantity': product_quantity}
else:
# 更新购物车
print('更新前', session['cart'])
session['cart'][product_id]['product_quantity'] += product_quantity
print('更新后', session['cart'])
return 'add-to-cart'
@app.route('/clear-cart')
def clear_cart():
session.clear()
return 'clear-cart'
购物车内容是 {'101': {'pdoct_id': '101', 'product_quantity': 2}}127.0.0.1 - - [03/Mar/2023 10:44:33] "GET /cart HTTP/1.1" 200 -
更新前 {'101': {'pdoct_id': '101', 'product_quantity': 2}}
更新后 {'101': {'pdoct_id': '101', 'product_quantity': 4}}
127.0.0.1 - - [03/Mar/2023 10:44:37] "POST /add-to-cart HTTP/1.1" 200 -
购物车内容是 {'101': {'pdoct_id': '101', 'product_quantity': 2}}
127.0.0.1 - - [03/Mar/2023 10:44:42] "GET /cart HTTP/1.1" 200 -
如上所示,添加购物车后访问购物车可以看到购物车添加的商品,我再次通过添加购物车更新商品后也显示商品数量发生变化了,但再次访问购物车的时候还是原来的数量,这位帮忙看下这什么情况,谢谢!
回答:
因为你更新的 cart
是字典,其不是简单数据类型。对于这种可变对象,必须在对象修改后,设置 session.modified = True
以更新,详见 Flask API - Sessions。
回答:
因为你的两个请求不是一个 session
解决方案:
方案一:服务端不用 session,而是搞一个全局变量
方案二:让两个请求是一个 session
回答:
是修改session那一步有问题,第一次添加购物车时生成了session,第二次更新是修改session,因为这里没有把修改后的session返回给客户端。所以在第二次添加购物车后,再次查询购物车,能发现第二次添加购物车没有生效。
这里我简单修改了一下:
# 更新购物车 print('更新前', session['cart'])
#session['cart'][product_id]['product_quantity'] = session['cart'][product_id]['product_quantity'] + product_quantity
old_value = session['cart'][product_id]['product_quantity']
session['cart'] = {}
session['cart'][product_id]={'pdoct_id':product_id, 'product_quantity': old_value + product_quantity}
print('更新后', session['cart'])
第二次再更新的时候,响应头里面重新返回了cookie
以上是 为什么flask session 购物车数量不更新? 的全部内容, 来源链接: utcz.com/p/938770.html