Django现有cookie未更新

时间:2017-01-28 07:18:15

标签: django django-models django-forms django-templates django-views

我想要做的是更新已经存在的现有django cookie。我正在创建添加到购物车功能但无法在现有Cookie中添加更多项目。任何帮助都是值得称道的。 我的代码是:

def AddToCart(request):
    id = request.POST.get('id')
    product = Product.objects.get(pk=id)
    response = render(request,'index.html')
    if request.COOKIES.get('product'):
        request.COOKIES['product'] = {'name':product.name,'price':product.price,'img':product.image.url}
    else:
        response.set_cookie('product',{'name':product.name,'price':product.price,'img':product.image.url},
                        max_age= 14 * 24 * 60 * 60)
    return response

1 个答案:

答案 0 :(得分:0)

使用request.COOKIES['product'] = ....仅在当前请求上下文中设置产品值(或者可能是COOKIES dict的副本,确实不确定),因此它不会在客户端设置cookie(响应) ),在下一个请求中,它将被客户端响应(在使用request.COOKIES['product'] = ....之前的cookie)中获取的cookie覆盖。

首先,您需要将request.COOKIES['product'] = ...替换为response.set_cookie("product", ...)才能更改值。

这将仅解决您的Cookie设置问题,但不会将多个产品附加到您的Cookie。

为此我建议您使用sessions,因为它们在操作数据结构(如dicts和数组)时更容易使用,例如:在客户端cookie方法上,您需要编写自己的序列化来操作存储在cookie中的字典/数组,例如:https://stackoverflow.com/a/2383482

此外,您可以参考此答案来判断您是否需要基于cookie或数据库的会话: https://stackoverflow.com/a/18240232/4724196