Hat Django Unterstützung multi-value cookies?
Frage
Ich möchte ein cookie gesetzt, über Django mit, der mehrere unterschiedliche Werte, ähnlich .NET HttpCookie.Werte Eigenschaft.Blick auf die Dokumentation, Ich kann nicht sagen, ob dies möglich ist.Es sieht aus wie es braucht nur einen string, so gibt es einen anderen Weg?
Ich habe versucht, übergeben Sie ein array ([10, 20, 30]
) und Wörterbuch ({'name': 'Scott', 'id': 1}
), die aber nur umgewandelt zu bekommen in Ihre string-format.Meine aktuelle Lösung ist, benutzen Sie einfach einen beliebigen Trennzeichen und dann analysiert werden, wenn es zu Lesen, was fühlt sich eklig.Wenn multi-Werten nicht möglich ist, gibt es einen besseren Weg?Ich würde lieber nicht verwenden viele von cookies, denn das wäre ärgerlich.
Lösung
.Netze multi-value-cookies, die genauso funktioniert, wie was Sie tun in django mit einem separator.Sie haben gerade abstrahiert, dass Weg für Sie.Was Sie tun, ist gut und Billig, und ich glaube nicht, dass Django hat, etwas bestimmtes zu "lösen" dieses problem.
Ich werde sagen, dass Sie das richtige zu tun, nicht mit mehreren cookies.Halten Sie die over-the-wire-overhead, indem Sie tun, was Sie tun.
Andere Tipps
Wenn Sie auf der Suche nach etwas ein wenig mehr abstrahiert, versuchen Sie es mit Sitzungen.Ich glaube, die Art, wie Sie arbeiten, ist durch die Speicherung einer id im cookie, das entspricht einem Datensatz Datenbank.Sie können speichern, was Sie wollen in es.Es ist nicht genau das gleiche wie das, was Sie suchen, aber es könnte funktionieren, wenn es Ihnen nichts ausmacht, eine kleine Menge von db overhead.
(Späte Antwort!)
Dies wird dicker, aber Sie rufen immer die Verwendung von python built-in serialisieren.
Sie können immer etwas tun wie:
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)
Dann können Sie die cookie -:
newcookie = MultiCookie(cookie=request.COOKIES.get('multi'))
values_for_cookie = newcookie.values
Oder setzen Sie die Werte:
mylist = [ 1, 2, 3 ]
newcookie = MultiCookie(values=mylist)
request.set_cookie('multi',value=newcookie)
Django unterstützt nicht es.Der beste Weg zum trennen der Werte mit beliebigen Trennzeichen und dann teilt die Zeichenkette, wie du schon gesagt.