2008-09-24 44 views
1

我想通過Django設置一個cookie,它有幾個不同的值,類似於.NET的HttpCookie.Values屬性。看着documentation,我不知道這是否可能。它看起來只是一個字符串,所以有另一種方式?Django是否支持多值cookie?

我試過將它傳遞給一個數組([10, 20, 30])和字典({'name': 'Scott', 'id': 1}),但他們只是被轉換爲它們的字符串格式。我目前的解決方案是隻使用一個任意的分隔符,然後在讀入時解析它,這會讓人感到噁心。如果多值不可能,有沒有更好的方法?我寧願不使用大量的cookies,因爲這會讓人討厭。

回答

6

.NET的多值cookie與您在django中使用分隔符所做的完全相同。他們已經爲你抽象了。你在做的事情很好,我認爲Django沒有什麼具體的「解決」這個問題。

我會說你在做正確的事情,不使用多個cookie。通過做你正在做的事情來保持電線上的開銷。

0

Django不支持它。最好的辦法是將值與任意分隔符分開,然後分割字符串,就像你已經說過的那樣。

1

如果您正在尋找更抽象的東西,請嘗試使用sessions。我相信他們的工作方式是在cookie中存儲與數據庫記錄相匹配的ID。你可以存儲任何你想要的東西。它與您所尋找的不完全相同,但如果您不介意少量的數據庫開銷,它可能會起作用。

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)