Django是否支持多值Cookie?

时间:2020-03-06 14:40:45  来源:igfitidea点击:

我想通过Django设置一个cookie,它具有几个不同的值,类似于.NET的HttpCookie.Values属性。查看文档,我无法确定这是否可行。看起来它只需要一个字符串,所以还有另一种方法吗?

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

解决方案

.NETs多值Cookie的工作方式与使用分隔符在django中所做的完全相同。他们刚刚为我们摘录了这些内容。我们正在做的事情是正确且适当的,而且我认为Django没有任何特定的解决方案。

我会说我们在做正确的事情,而不是使用多个cookie。通过执行操作来降低无线开销。

Django不支持。最好的方法是使用任意分隔符将值分开,然后仅拆分字符串,就像我们已经说过的那样。

如果我们正在寻找一些抽象的东西,请尝试使用会话。我相信它们的工作方式是通过在与数据库记录匹配的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)