在Django项目中,request.COOKIES与document.cookie有何区别?

6

我正在开发一个Django项目。我希望在用户登录或注销后保持UI首选项。

所以我想使用cookie。但我不确定Python中的request.COOKIES和JS中的document.cookie是否相同。 我的意思是,如果我从JS或Django视图获取和设置cookie值,它是否相同。 希望我的问题清楚明了。我对cookie这个主题有点陌生。 谢谢。

2个回答

11
request.COOKIESdocument.cookie包含相同的数据集;但是,获取和设置cookie值的方法完全不同。 request.COOKIES是Python中的字典,您可以使用它来读取cookie。例如,您有一个名为"color"的cookie,其值为"blue",当您执行request.COOKIES['color']时,会返回字符串"blue"。您不能使用request.COOKIES来设置cookie,因为这些cookie值是由浏览器在请求时发送给Django的。要设置cookie,您需要使用HttpResponse.set_cookie。(https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.set_cookie) 另一方面,document.cookie是“原始”格式的cookie,是以分号分隔的名称-值对的字符串。要读取特定的cookie,您需要在该字符串上执行搜索,以查找所需的cookie;要设置cookie,您需要调用document.cookie = "name=value;..."[ref]。但大多数情况下,JavaScript库/框架已经为您完成了这项工作,因此获取/设置cookie只需要一组函数调用即可。

2
+1并且强调一下,request.COOKIES是通过Python在服务器端读取cookie,而document.cookie是在客户端读取cookie。 - Timmy O'Mahony
感谢 @TimmyO'Mahony 的进一步解释 :) - zephyr
我还有一个疑问。如果我通过Python设置Cookie,是否可以在浏览器中查看Cookie值,比如通过开发者工具控制台来查看document.cookie的值? - zephyr
@SumeetDhariwal 是的,你可以在开发者工具中看到它。 - Ye Liu

1

request.COOKIES

返回

一个标准的Python字典,包含所有cookie。键和值都是字符串。

document.cookie返回一个字符串。

我认为遍历一个字典并获取所有cookie比解析javascript返回的字符串更容易。


我的问题是,对于设置cookie,我不想像在Django中那样发送响应。这就是为什么我考虑使用JavaScript,如果两种方法的工作方式相同的话。 - zephyr
如果您不想发送响应,那么您应该使用JavaScript。 - Victor Castillo Torres
有没有办法在JavaScript或Django模板中设置request.COOKIES? - zephyr
不客气,在您的视图中,您可以发送一个变量,该变量获取请求的COOKIES值,然后您就可以在Django模板中使用它了。 - Victor Castillo Torres

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接