我想通过Django设置一个cookie,它有几个不同的值,类似于.NET的HttpCookie.Values属性。看documentation,我不知道这是否可行。看起来它只是一个字符串,所以有另一种方式吗?
我尝试将数组([10, 20, 30]
)和字典({'name': 'Scott', 'id': 1}
)传递给它,但它们只是转换为字符串格式。我目前的解决方案是只使用一个任意的分隔符,然后在读取时解析它,感觉很棘手。如果无法实现多值,是否有更好的方法?我宁愿不使用大量的cookie,因为这会让人讨厌。
答案 0 :(得分:6)
.NETs多值cookie的工作方式与使用分隔符在django中执行的方式完全相同。他们只是为你抽象出来。你正在做的事情是正确的,我不认为Django有任何具体的“解决”这个问题。
我会说你做的是正确的,不使用多个cookie。做你正在做的事情,保持线上的开销。
答案 1 :(得分:1)
如果您正在寻找更抽象的内容,请尝试使用sessions。我相信他们的工作方式是在cookie中存储与数据库记录匹配的id。你可以存储你想要的任何东西。它与您正在寻找的并不完全相同,但如果您不介意少量的数据包开销,它可能会有效。
答案 2 :(得分:1)
(迟到的答案!)
这将更笨重,但你总是使用python的内置序列化。
您可以随时执行以下操作:
import pickle
class MultiCookie():
def __init__(self,cookie=None,values=None):
if cookie != None:
try:
self.values = pickle.loads(cookie)
except:
# assume that it used to just hold a string value
self.values = cookie
elif values != None:
self.values = values
else:
self.values = None
def __str__(self):
return pickle.dumps(self.values)
然后,你可以获得cookie:
newcookie = MultiCookie(cookie=request.COOKIES.get('multi'))
values_for_cookie = newcookie.values
或设置值:
mylist = [ 1, 2, 3 ]
newcookie = MultiCookie(values=mylist)
request.set_cookie('multi',value=newcookie)
答案 3 :(得分:0)
Django不支持它。最好的方法是用任意分隔符分隔值,然后就像你已经说过的那样分割字符串。