Django:从请求中删除Cookie

时间:2019-01-27 05:13:24

标签: django

我知道如何从响应中删除Cookie:

response = HttpResponseRedirect(self.get_success_url())
response.delete_cookie("item_id")
return response

但是如何从请求中删除Cookie?

我的视图仅具有请求,而没有响应:

当用户到达我的“ thanks.html”页面时,我想删除cart_id cookie。

def thanks(request):
    order_number = Order.objects.latest('id').id
    return render(request, 'thanks.html', dict(order_number=order_number))

1 个答案:

答案 0 :(得分:1)

您不能从请求中删除cookie,否则这将是徒劳的。从服务器端“删除”(并设置)cookie的方式是在响应上发出特定的标头。该请求仅包含客户端发送的标头。

所有视图都有响应,在这里并不是很清楚,因为没有名为“响应”的东西,但是render总是返回一个。

  

render()

render(request, template_name, context=None, content_type=None, status=None, using=None)
     

将给定的模板与给定的上下文字典组合在一起,并返回带有该呈现文本的HttpResponse对象

     

Django没有提供返回TemplateResponse的快捷功能,因为TemplateResponse的构造函数提供了与render()相同的便利性。

(强调是我的)

所以您可以做的是像这样将更新的响应返回给用户之前对其进行更新:

def thanks(request):
    order_number = Order.objects.latest('id').id
    response = render(request, 'thanks.html', dict(order_number=order_number))
    response.delete_cookie("item_id")
    return response