Поддерживает ли Django многозначные куки? - PullRequest
1 голос
/ 24 сентября 2008

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

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

Ответы [ 4 ]

6 голосов
/ 24 сентября 2008

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

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

1 голос
/ 05 марта 2010

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

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

Затем вы можете получить печенье:

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)
1 голос
/ 25 сентября 2008

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

0 голосов
/ 25 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...