Я хотел бы установить cookie через Django с несколькими разными значениями, аналогичными свойству HttpCookie.Values .NET. Глядя на документация, я не могу сказать, возможно ли это. Похоже, он просто берет строку, есть ли другой способ?
Я пробовал передать ему массив ([10, 20, 30]) и словарь ({'name': 'Scott', 'id': 1}), но они просто преобразуются в свой строковый формат. Мое текущее решение - просто использовать произвольный разделитель, а затем анализировать его при чтении, что кажется неприятным. Если мульти-значения невозможны, есть ли лучший способ? Я бы предпочел не использовать много файлов cookie, потому что это меня раздражает.






Многозначные файлы cookie .NET работают точно так же, как и то, что вы делаете в django, используя разделитель. Они просто абстрагировали это для вас. То, что вы делаете, хорошо и правильно, и я не думаю, что у Django есть что-то особенное, чтобы «решить» эту проблему.
Я скажу, что вы поступаете правильно, не используя несколько файлов cookie. Делая то, что вы делаете, не допускайте лишних накладных расходов.
Django его не поддерживает. Лучшим способом было бы разделить значения произвольным разделителем, а затем просто разделить строку, как вы уже сказали.
Если вы ищете что-то более абстрактное, попробуйте использовать сессии. Я считаю, что они работают, сохраняя идентификатор в файле cookie, который соответствует записи в базе данных. Вы можете хранить в нем все, что захотите. Это не совсем то, что вы ищете, но это может сработать, если вы не возражаете против небольшого количества накладных расходов в db.
(Поздний ответ!)
Это будет более громоздко, но вы всегда вызываете 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)