首页 > 解决方案 > Django:从请求中删除cookie

问题描述

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

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

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

我有一个只有请求但没有响应的视图:

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

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

标签: django

解决方案


您不能从请求中删除 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

推荐阅读