2

我想通过 Django 设置一个 cookie,它有几个不同的值,类似于 .NET 的HttpCookie.Values属性。查看文档,我不知道这是否可能。看起来它只需要一个字符串,那么还有其他方法吗?

我尝试将数组 ( [10, 20, 30]) 和字典 ( {'name': 'Scott', 'id': 1}) 传递给它,但它们只是被转换为它们的字符串格式。我目前的解决方案是只使用任意分隔符,然后在读入时解析它,这感觉很恶心。如果多值是不可能的,有没有更好的方法?我宁愿不要使用大量的 cookie,因为那样会很烦人。

4

4 回答 4

7

.NET 多值 cookie 的工作方式与您在 django 中使用分隔符的方式完全相同。他们只是为您抽象了这些内容。您所做的一切都很好,而且我认为 Django 没有任何特定的东西可以“解决”这个问题。

我会说你在做正确的事,不使用多个 cookie。通过做你正在做的事情来降低网络开销。

于 2008-09-24T18:35:11.277 回答
1

如果您正在寻找更抽象的东西,请尝试使用sessions。我相信它们的工作方式是在 cookie 中存储一个与数据库记录匹配的 id。您可以在其中存储任何您想要的东西。它与您正在寻找的内容并不完全相同,但如果您不介意少量的数据库开销,它可能会起作用。

于 2008-09-25T01:44:18.767 回答
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)
于 2010-03-04T23:24:10.510 回答
0

Django 不支持它。最好的方法是用任意分隔符分隔值,然后只拆分字符串,就像你已经说过的那样。

于 2008-09-24T21:03:05.370 回答