【问题标题】:Set request.session before we在我们之前设置 request.session
【发布时间】:2020-07-17 23:42:04
【问题描述】:

我现在正在编写一个构建电子商务网站的课程。
说到购物车部分,它谈到了会话。
然后我有以下问题:
在下面的代码中,为什么我们必须写这个request.session['cart_id'] = '12'
在我们尝试查看它是否存在之前,我看不出设置cart_id 的意义。
如果我们提前设置,就不会是None,那为什么还要做if/else循环呢?
我只是无法真正意识到这部分的目标是什么,请任何人赐教!真的非常感谢!

def cart_create(user=None):
    cart_obj = Cart.objects.create(user=None)
    return cart_obj


def cart_home(request):
    request.session['cart_id'] = '12'
    cart_id = request.session.get("cart_id",None)
    qs = Cart.objects.filter(id=cart_id)
    if qs.count()==1:
        cart_obj = qs.first()
        print('Card ID exist')
        print(request.session.cart_id)
    else:
        cart_obj = cart_create()
        request.session['cart_id'] = cart_obj.id
        print('New Cart ID created')
        print(request.session.cart_id)

    return render(request,"carts/home.html",{})

【问题讨论】:

    标签: python django session


    【解决方案1】:

    保存会话时

    默认情况下,Django 仅在会话被修改时才保存到会话数据库中——也就是说,如果它的任何字典值已被分配或删除:

    读到这里,我可以看到他们正在修改会话以将其保存到数据库中,然后继续处理购物车的其余逻辑。

    https://docs.djangoproject.com/en/3.0/topics/http/sessions/

    要更改此默认行为,请将 SESSION_SAVE_EVERY_REQUEST 设置设置为 True。当设置为 True 时,Django 将在每次请求时将会话保存到数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多