Domanda

Vorrei impostare un cookie tramite Django con valori diversi, simile a proprietà HttpCookie.Values ??. Guardando la documentazione , Non so dire se sia possibile. Sembra che ci voglia solo una stringa, quindi c'è un altro modo?

Ho provato a passargli un array ( [10, 20, 30] ) e un dizionario ( {'name': 'Scott', 'id': 1} ) ma vengono semplicemente convertiti nel loro formato stringa. La mia attuale soluzione è semplicemente usare un separatore arbitrario e quindi analizzarlo quando lo leggo, il che mi fa sentire male. Se i valori multipli non sono possibili, esiste un modo migliore? Preferirei non usare molti cookie, perché sarebbe fastidioso.

È stato utile?

Soluzione

I cookie multi-valore di .NET funzionano esattamente come quello che stai facendo in django usando un separatore. L'hanno appena estratto per te. Quello che stai facendo è perfetto e non credo che Django abbia qualcosa di specifico per "risolvere" questo problema.

Dirò che stai facendo la cosa giusta, nel non usare più cookie. Tieni il sovraccarico over-the-wire facendo quello che stai facendo.

Altri suggerimenti

Se stai cercando qualcosa di un po 'più astratto, prova a usare sessioni . Credo che il modo in cui funzionano è memorizzando un ID nel cookie che corrisponde a un record del database. Puoi conservare quello che vuoi in esso. Non è esattamente lo stesso di quello che stai cercando, ma potrebbe funzionare se non ti dispiace una piccola quantità di db overhead.

(Risposta in ritardo!)

Questo sarà più voluminoso, ma tu chiami sempre usando la serializzazione integrata di Python.

Puoi sempre fare qualcosa del tipo:

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)

Quindi, puoi ottenere il cookie:

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

Oppure imposta i valori:

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

Django non lo supporta. Il modo migliore sarebbe quello di separare i valori con un separatore arbitrario e quindi dividere la stringa, come hai già detto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top