Поддерживает ли Django многозначные файлы cookie?

StackOverflow https://stackoverflow.com/questions/128815

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хотел бы установить файл cookie через Django, который имеет несколько разных значений, похожих на .NET. HttpCookie.Значения свойство.Глядя на документация, я не могу сказать, возможно ли это.Похоже, для этого требуется всего лишь строка, так есть ли другой способ?

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

Это было полезно?

Решение

Многозначные файлы cookie .NET работают точно так же, как и в django, с использованием разделителя.Они просто абстрагировали это для вас.То, что вы делаете, нормально и правильно, и я не думаю, что у Django есть что-то конкретное, чтобы «решить» эту проблему.

Я скажу, что вы поступаете правильно, не используя несколько файлов cookie.Уменьшите накладные расходы на беспроводную связь, делая то, что вы делаете.

Другие советы

Если вы ищете что-то более абстрактное, попробуйте использовать сессии.Я считаю, что они работают путем сохранения идентификатора в файле cookie, который соответствует записи базы данных.Вы можете хранить в нем все, что захотите.Это не совсем то, что вы ищете, но это может сработать, если вы не возражаете против небольшого количества накладных расходов на БД.

(Поздний ответ!)

Это будет более громоздким, но вы всегда должны использовать встроенную сериализацию 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)

Джанго не поддерживает это.Лучшим способом было бы разделить значения произвольным разделителем, а затем просто разделить строку, как вы уже сказали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top