Django 是不是支持多值 cookie?
Posted
技术标签:
【中文标题】Django 是不是支持多值 cookie?【英文标题】:Does Django support multi-value cookies?Django 是否支持多值 cookie? 【发布时间】:2010-09-12 19:56:04 【问题描述】:我想通过 Django 设置一个 cookie,它有几个不同的值,类似于 .NET 的 HttpCookie.Values 属性。看着documentation,我不知道这是否可能。看起来只需要一个字符串,那么还有其他方法吗?
我尝试将数组 ([10, 20, 30]
) 和字典 ('name': 'Scott', 'id': 1
) 传递给它,但它们只是被转换为字符串格式。我目前的解决方案是只使用任意分隔符,然后在读入时解析它,这感觉很恶心。如果多值是不可能的,有没有更好的方法?我宁愿不要使用大量的 cookie,因为那样会很烦人。
【问题讨论】:
【参考方案1】:.NET 的多值 cookie 的工作方式与您在 django 中使用分隔符的方式完全相同。他们只是为您抽象了这些内容。您所做的一切都很好,而且我认为 Django 没有任何特定的东西可以“解决”这个问题。
我会说你在做正确的事,没有使用多个 cookie。通过做你正在做的事情来降低网络开销。
【讨论】:
【参考方案2】:如果您正在寻找更抽象的东西,请尝试使用sessions。我相信它们的工作方式是在 cookie 中存储一个与数据库记录匹配的 id。您可以在其中存储任何您想要的东西。它与您正在寻找的不完全相同,但如果您不介意少量的数据库开销,它可以工作。
【讨论】:
【参考方案3】:(迟到的答案!)
这会比较笨重,但你调用总是使用 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)
【讨论】:
【参考方案4】:Django 不支持它。最好的方法是用任意分隔符分隔值,然后只拆分字符串,就像你已经说过的那样。
【讨论】:
以上是关于Django 是不是支持多值 cookie?的主要内容,如果未能解决你的问题,请参考以下文章
Django Admin:两个 ListFilter Spanning 多值关系
在 Django 视图中检索 Select2 多值以在后端使用