Question

J'aimerais créer un cookie via Django avec plusieurs valeurs différentes, similaire au HttpCookie.Values ??. En regardant la documentation , Je ne peux pas dire si c'est possible. On dirait que ça prend juste une ficelle, y a-t-il un autre moyen?

J'ai essayé de passer un tableau ( [10, 20, 30] ) et un dictionnaire ( {'name': 'Scott', 'id': 1} ) mais ils sont simplement convertis en format de chaîne. Ma solution actuelle consiste simplement à utiliser un séparateur arbitraire, puis à l’analyser lors de la lecture, ce qui est décevant. Si plusieurs valeurs ne sont pas possibles, existe-t-il une meilleure solution? Je préférerais ne pas utiliser beaucoup de cookies, car cela deviendrait ennuyeux.

Était-ce utile?

La solution

Les cookies multi-valeurs .NET fonctionnent exactement de la même manière que ce que vous faites dans Django en utilisant un séparateur. Ils viennent de résumer cela pour vous. Ce que vous faites est bien, et je ne pense pas que Django ait quelque chose de spécifique pour "résoudre" ce problème.

Je dirai que vous faites ce qu'il faut, en n'utilisant pas plusieurs cookies. Faites ce que vous faites en gardant les frais généraux superflus.

Autres conseils

Si vous recherchez quelque chose de plus abstrait, utilisez sessions . Je crois que leur travail consiste à stocker dans le cookie un identifiant qui correspond à un enregistrement de base de données. Vous pouvez y stocker ce que vous voulez. Ce n'est pas exactement la même chose que ce que vous recherchez, mais cela pourrait fonctionner si vous ne craignez pas une petite quantité de db overhead.

(Réponse tardive!)

Cela sera plus volumineux, mais vous appelez toujours utiliser la sérialisation intégrée de python.

Vous pouvez toujours faire quelque chose comme:

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)

Ensuite, vous pouvez obtenir le cookie:

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

Ou définissez les valeurs:

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

Django ne le prend pas en charge. Le mieux serait de séparer les valeurs avec un séparateur arbitraire, puis de scinder la chaîne, comme vous l'avez déjà dit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top