O Django suporta cookies multi-valor?
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.
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.