我正在构建一个简单的网上商店,其中购物篮中的产品在用户注册之前(在信息存储在 SQL 中之后)存储在会话字典中。错误处理没有提供预期的结果,我不明白为什么。
意向:
打印(“hit”)用于查看代码实际采用的路线。即使添加第二个同类产品也会触发第一个 KeyError。为什么会走那条路?
enter code [email protected]("/product_to_basket/<product_id>")
def add_product_basket(product_id):
try:
session["basket"][product_id] += 1
print("hit1")
except KeyError:
try:
session["basket"].update({product_id: 1})
print("hit2")
except KeyError:
session.update({"basket": {product_id: 1}})
print("hit3")
会话中可变结构的更改不会自动应用。在这种情况下,您必须自己将
session.modified
属性显式设置为 True
。
@app.route('/product_to_basket/<int:product_id>')
def add_product_basket(product_id):
if 'basket' not in session:
session['basket'] = {}
if product_id not in session['basket']:
session['basket'][product_id] = 0
session['basket'][product_id] += 1
session.modified = True
# ...