【问题标题】:Django existing cookie is not updatingDjango 现有 cookie 未更新
【发布时间】:2017-06-13 22:08:50
【问题描述】:

我想要做的是更新已经存在的现有 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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢。我需要在这种情况下使用会话。干杯。赞成。
    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多