为什么flask session 购物车数量不更新?

问题描述

我在尝试使用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。


回答:

因为你的两个请求不是一个 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 购物车数量不更新?

以上是 为什么flask session 购物车数量不更新? 的全部内容, 来源链接: utcz.com/p/938770.html

回到顶部