Flask 会话持久 KeyError

问题描述 投票:0回答:1

我正在构建一个简单的网上商店,其中购物篮中的产品在用户注册之前(在信息存储在 SQL 中之后)存储在会话字典中。错误处理没有提供预期的结果,我不明白为什么。

意向:

  • 添加第一个产品时,密钥“篮子”尚不存在 PATH > KeyError KeyError
  • 添加同类第一个产品时,相应的键“product_id”尚不存在 PATH > KeyError Try
  • 当添加另一同类产品时,该值加一> PATH Try Try

打印(“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")
python flask session keyerror
1个回答
0
投票

会话中可变结构的更改不会自动应用。在这种情况下,您必须自己将

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
    # ...
© www.soinside.com 2019 - 2024. All rights reserved.