Pergunta

Eu gostaria de definir um cookie via Django com que tem vários valores diferentes para ele, semelhante à do .NET HttpCookie.Values ?? propriedade. Olhando para o documentação , Eu não posso dizer se isso é possível. Parece que ele só tem uma corda, por isso existe outra maneira?

Eu tentei passá-lo um array ([10, 20, 30]) e dicionário ({'name': 'Scott', 'id': 1}), mas eles só são convertidos ao seu formato string. Minha solução atual é usar apenas um separador arbitrária e, em seguida, analisá-lo quando lê-lo em, que se sente icky. Se vários valores não são possíveis, há uma maneira melhor? Eu prefiro não usar muita cookies, porque isso iria ficar chato.

Foi útil?

Solução

.NETs biscoitos multi-valor funcionam exatamente da mesma forma que o que você está fazendo em Django usando um separador. Eles acabaram abstraída que longe para você. O que você está fazendo é bom e apropriado, e eu não acho que o Django tem nada específico para 'resolver' o problema.

Eu vou dizer que você está fazendo a coisa certa, em não usar vários cookies. Mantenha o over-the-wire cima para baixo, fazendo o que você está fazendo.

Outras dicas

Se você está procurando algo um pouco mais abstrata, tente usar sessões . Eu acredito que a forma como eles trabalham é armazenando uma identificação no cookie que corresponde a um registro de banco de dados. Você pode armazenar o que quiser nele. Não é exatamente o mesmo que o que você está procurando, mas poderia funcionar se você não se importa uma pequena quantidade de sobrecarga db.

(resposta tardia!)

Este será mais volumoso, mas você chama sempre uso python é construído em serialização.

Você sempre pode fazer algo como:

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)

Em seguida, você pode obter o cookie:

newcookie = MultiCookie(cookie=request.COOKIES.get('multi'))
values_for_cookie = newcookie.values

ou definir os valores:

mylist = [ 1, 2, 3 ]
newcookie = MultiCookie(values=mylist)
request.set_cookie('multi',value=newcookie)

Django não apoiá-lo. A melhor forma seria a de separar os valores com separador arbitrária e em seguida, basta dividir a string, como você já disse.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top