Django - Manejo de cookies

A veces, es posible que desee almacenar algunos datos por visitante del sitio según los requisitos de su aplicación web. Tenga siempre en cuenta que las cookies se guardan en el lado del cliente y, según el nivel de seguridad del navegador de su cliente, la configuración de cookies puede funcionar en ocasiones y en ocasiones no.

Para ilustrar el manejo de cookies en Django, creemos un sistema usando el sistema de inicio de sesión que creamos antes. El sistema lo mantendrá conectado durante X minutos, y más allá de ese tiempo, estará fuera de la aplicación.

Para ello, deberá configurar dos cookies, last_connection y nombre de usuario.

Al principio, cambiemos nuestra vista de inicio de sesión para almacenar nuestro nombre de usuario y cookies de last_connection -

from django.template import RequestContext

def login(request):
   username = "not logged in"
   
   if request.method == "POST":
      #Get the posted form
      MyLoginForm = LoginForm(request.POST)
   
   if MyLoginForm.is_valid():
      username = MyLoginForm.cleaned_data['username']
   else:
      MyLoginForm = LoginForm()
   
   response = render_to_response(request, 'loggedin.html', {"username" : username}, 
      context_instance = RequestContext(request))
   
   response.set_cookie('last_connection', datetime.datetime.now())
   response.set_cookie('username', datetime.datetime.now())
	
   return response

Como se ve en la vista anterior, la configuración de la cookie la realiza el set_cookie método llamado en la respuesta, no en la solicitud, y también tenga en cuenta que todos los valores de las cookies se devuelven como una cadena.

Creemos ahora un formView para el formulario de inicio de sesión, donde no mostraremos el formulario si la cookie está configurada y no tiene más de 10 segundos -

def formView(request):
   if 'username' in request.COOKIES and 'last_connection' in request.COOKIES:
      username = request.COOKIES['username']
      
      last_connection = request.COOKIES['last_connection']
      last_connection_time = datetime.datetime.strptime(last_connection[:-7], 
         "%Y-%m-%d %H:%M:%S")
      
      if (datetime.datetime.now() - last_connection_time).seconds < 10:
         return render(request, 'loggedin.html', {"username" : username})
      else:
         return render(request, 'login.html', {})
			
   else:
      return render(request, 'login.html', {})

Como puede ver en el formulario de arriba, acceder a la cookie que estableció, se realiza a través del atributo COOKIES (dict) de la solicitud.

Ahora cambiemos el archivo url.py para cambiar la URL para que se empareje con nuestra nueva vista:

from django.conf.urls import patterns, url
from django.views.generic import TemplateView

urlpatterns = patterns('myapp.views',
   url(r'^connection/','formView', name = 'loginform'),
   url(r'^login/', 'login', name = 'login'))

Al acceder a / myapp / connection, obtendrá la siguiente página:

Y será redirigido a la siguiente pantalla al enviar:

Ahora, si intenta acceder a / myapp / connection nuevamente en el rango de 10 segundos, será redirigido directamente a la segunda pantalla. Y si vuelve a acceder a / myapp / connection fuera de este rango, obtendrá el formulario de inicio de sesión (pantalla 1).