问题描述
我在尝试使用flask session 实现购物车的功能,源代码如下:
from flask import Flask, session, request
app = 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。