在Django中修改请求会话

时间:2019-04-21 18:47:52

标签: django django-templates django-views

此代码来自djagno 2示例书 顺便说一句,这非常有帮助。这里的问题是我们如何修改了请求会话,尽管除了保存方法(((它在购物车的会话中,在 init 之后的第一行中)之外)都没有修改, ) 我看到的是我们从会话字典的这一行复制了一个
self.session = request.session

class Cart(object):
def __init__(self, request):
    self.session = request.session
    cart = self.session.get(settings.CART_SESSION_ID)
    if not cart:
        cart = self.session[settings.CART_SESSION_ID] = {}
    self.cart = cart

def add(self, product, quantity=1, update_quantity=False):
    '''
    Add a product to the cart or update it is quantity
    '''
    product_id = product.id
    if not product_id in self.cart:
        self.cart[product_id] = {'quantity': 0,
                                 'price': str(product.price)}

    if update_quantity:
        self.cart[product_id]['quantity'] = quantity
    else:
        self.cart[product_id]['quantity'] += quantity
    self.save()

def save(self):
    self.session['modified'] = True

为进一步说明,您可以在此处找到项目的整个代码 code

当我将用户会话从上下文传递到模板时,我设法看到了该用户会话,并且该会话已经被修改

1 个答案:

答案 0 :(得分:0)

此行进行复制:

>>> def f():
...     f.a = 3


>>> f()
>>> f.a
3

购物车实例中的会话是请求会话。 self.cart是该会话中的字典,因此对它的所有更改都直接写入该会话中。然后,当调用保存时,将设置修改标志。