此代码来自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
当我将用户会话从上下文传递到模板时,我设法看到了该用户会话,并且该会话已经被修改
答案 0 :(得分:0)
此行不进行复制:
>>> def f():
... f.a = 3
>>> f()
>>> f.a
3
购物车实例中的会话是请求会话。 self.cart是该会话中的字典,因此对它的所有更改都直接写入该会话中。然后,当调用保存时,将设置修改标志。