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)