2011-04-08 11 views
7

En otros idiomas, es muy fácil actualizar, por ejemplo, la fecha de vencimiento de una cookie, pero no puedo por mi vida descubrir cómo hacerlo en Django.Cómo actualizar una cookie en Django

La razón para actualizar la fecha de caducidad en lugar de establecer una nueva cookie es para no tener que hacer una llamada a la base de datos en cada página.

EDIT: Gracias por todas las respuestas, pero parece que hay cierta confusión acerca de lo que estoy tratando de lograr, por lo que voy a tratar de ser más precisos: Seleccionar u Obtener una cookie no es la cuestión. Lo que me gustaría saber es cómo ACTUALIZAR una cookie ya establecida. ¡Perdón por el malentendido!

+0

No he encontrado ninguna manera de hacerlo. Pensé que habría una manera de 1. Obtener la cookie 2. Cambiar la fecha de vencimiento, así de simple. Pseudocódigo que no funciona: c = request.COOKIES ['mycookie'] c.expire = datetime.datetime.now() + datetime.timedelta (days = 30) – mistalaba

Respuesta

10

En algún momento, para un nuevo usuario, debe establecer la cookie. El tiempo de expiración de la cookie suele ser por usuario. En Django, se puede establecer la edad de la galleta con el siguiente código:

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

La cookie anterior expirará después de 1000 en el navegador del usuario.

También hay un atributo expires donde puede especificar una fecha de caducidad.

Referencia: https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse.set_cookie

EDITAR

A partir del código fuente de Django, intente lo siguiente:

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

caducan los anteriores 1 día desde hoy.

+0

Ya configuré la cookie, la pregunta es ¿cómo actualizar una cookie ya configurada? – mistalaba

+0

Intenté su respuesta editada, pero parece que no puede hacer eso con las cookies estándar (obteniendo KeyError 'cookie_name', incluso si configuró previamente esa cookie).Después de investigar esto, parece que podría funcionar si usa django.http.SimpleCookie(). Investigaré más ... ¡gracias por el liderazgo! – mistalaba

2

galletas Acceso: request.COOKIES[..]

galletas de ajuste: response.set_cookie()

Más informaciones aquí: django book: Sessions...

+0

¿Es posible modificar una cookie visitada? a la request.COOKIES ['mycookie']. expire = etc? – mistalaba

+0

Sí mira http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/ Puede modificar para cambiar el tiempo de expiración – iddqd

0

tres maneras: 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 en la plantilla

+0

Bueno, quiero explorar una solución que no implique la configuración de la cookie de nuevo. Podría, por supuesto, seguir el mismo camino, pero no se siente muy ... pitónico :) – mistalaba

Cuestiones relacionadas