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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top