2011-04-08 5 views
7

Dans d'autres langues, il est très facile de mettre à jour, par exemple, la date d'expiration d'un cookie, mais je ne sais pas comment le faire dans Django! La raison de la mise à jour de la date d'expiration au lieu de définir un nouveau cookie est que je n'ai pas besoin de faire un appel de base de données sur chaque page.Comment mettre à jour un cookie dans Django

EDIT: Merci pour toutes les réponses, mais il semble y avoir une certaine confusion quant à ce que je suis en train d'accomplir, alors je vais essayer d'être plus précis: de fixer ou d'un cookie n'est pas la question. Ce que je voudrais savoir est comment mettre à jour un cookie déjà mis. Désolé pour le malentendu!

+0

Je n'ai trouvé aucun moyen de le faire. Je pensais qu'il y aurait un moyen de 1. Obtenir le cookie 2. Changer la date d'expiration, aussi simple que cela. Pseudo-code qui ne fonctionne pas: c = request.COOKIES ['mycookie'] c.expire = datetime.datetime.now() + datetime.timedelta (jours = 30) – mistalaba

Répondre

10

À un certain point, pour un nouvel utilisateur, vous devez définir le cookie. Le délai d'expiration des cookies est généralement un cas par utilisateur. Dans Django, vous pouvez définir l'âge de cookie avec le code suivant:

response = redirect('somewhere') # replace redirect with HttpResponse or render 
response.set_cookie('cookie_name', 'cookie_value', max_age=1000) 

Le cookie ci-dessus expirera après 1000s dans le navigateur d'un utilisateur.

Il existe également un attribut expires dans lequel vous pouvez spécifier une date d'expiration.

Référence: https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse.set_cookie

EDIT

à partir du code source django, procédez comme suit:

response = redirect('somewhere') # replace redirect with HttpResponse or render 
response.cookies['cookie_name']['expires'] = datetime.today() + timedelta(days=1) 

ci-dessus annule la 1 jour dès aujourd'hui.

+0

J'ai déjà mis le cookie, la question est de savoir comment mettre à jour un cookie déjà mis en place? – mistalaba

+0

J'ai essayé votre réponse éditée, mais il semble que vous ne pouvez pas le faire avec les cookies standard (obtenir KeyError 'cookie_name', même si vous avez précédemment défini ce cookie).Après avoir examiné cela, il semble que cela pourrait fonctionner si vous utilisez django.http.SimpleCookie(). Je vais enquêter plus loin .. merci pour le plomb! – mistalaba

2

les cookies: Accès request.COOKIES[..]

cookies Définition: response.set_cookie()

Plus d'informations ici: django book: Sessions...

+0

Est-il possible de modifier un cookie accédé? a la demande.COOKIES ['mycookie']. expire = etc? – mistalaba

+0

Oui regarder http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/ vous pouvez modifier pour changer le temps d'expiration – iddqd

0

Trois façons: 1)

response = render_to_response(template_name, {'data':'data'}) 
response.set_cookie("cookie_name","test_value") 
return response 

2Midellware: http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/

3) javascript dans le modèle

+0

Eh bien, je veux explorer une solution qui doesn Ne pas impliquer le cookie à nouveau. Pourrait bien sûr aller de la façon js, mais il ne se sent pas très ... pythonique :) – mistalaba

Questions connexes