我想通过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不支持它。最好的方法是用任意分隔符分隔值,然后就像你已经说过的那样分割字符串。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top