题
我想通过Django设置一个cookie,它有几个不同的值,类似于.NET的 HttpCookie.Values 属性。查看文档,我不知道这是否可行。看起来它只是一个字符串,所以有另一种方式吗?
我试过传递一个数组( [10,20,30]
)和字典( {'name':'Scott','id':1} 代码>)但他们只是转换为他们的字符串格式。我目前的解决方案是只使用一个任意的分隔符,然后在读取时解析它,感觉很棘手。如果无法实现多值,是否有更好的方法?我宁愿不使用大量的cookie,因为这会让人讨厌。
解决方案
.NETs多值cookie的工作方式与使用分隔符在django中执行的方式完全相同。他们只是为你抽象出来。你正在做的事情是正确的,我不认为Django有任何具体的“解决”这个问题。
我会说你做的是正确的,不使用多个cookie。做你正在做的事情,保持线上的开销。
其他提示
如果您正在寻找更抽象的东西,请尝试使用访问。我相信他们的工作方式是在cookie中存储与数据库记录匹配的id。你可以存储你想要的任何东西。它与您正在寻找的内容并不完全相同,但如果您不介意少量的数据包开销,它可能会有效。
(迟到的答案!)
这将更笨重,但你总是使用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)
Django不支持它。最好的方法是用任意分隔符分隔值,然后就像你已经说过的那样分割字符串。
不隶属于 StackOverflow