Django是否支持多值cookie?

时间:2008-09-24 18:09:14

标签: python django cookies

我想通过Django设置一个cookie,它有几个不同的值,类似于.NET的HttpCookie.Values属性。看documentation,我不知道这是否可行。看起来它只是一个字符串,所以有另一种方式吗?

我尝试将数组([10, 20, 30])和字典({'name': 'Scott', 'id': 1})传递给它,但它们只是转换为字符串格式。我目前的解决方案是只使用一个任意的分隔符,然后在读取时解析它,感觉很棘手。如果无法实现多值,是否有更好的方法?我宁愿不使用大量的cookie,因为这会让人讨厌。

4 个答案:

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