Django支持多值cookie吗?

2024-04-30 05:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试着给它传递一个数组([10, 20, 30])和字典({'name': 'Scott', 'id': 1}),但它们只是被转换成字符串格式。我目前的解决方案是只使用任意分隔符,然后在读入时解析它,这让人觉得恶心。如果不可能有多个值,有更好的方法吗?我不想用太多的饼干,因为那样会很烦人。在


Tags: django方法字符串nameidnet字典属性
3条回答

.NETs多值cookie的工作方式与在django中使用分隔符的方式完全相同。他们只是为你抽象出来的。你所做的一切都是正确的,我不认为Django有什么具体的“解决”这个问题。在

我要说你做的是正确的,不要使用多个cookies。做你正在做的事,把头顶上的电线放下。在

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

(迟答!)

这会比较庞大,但您可以调用always use 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)

然后,你可以得到饼干:

^{pr2}$

或设置值:

mylist = [ 1, 2, 3 ]
newcookie = MultiCookie(values=mylist)
request.set_cookie('multi',value=newcookie)

相关问题 更多 >