English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manejo de Cookies en Django

A veces, es posible que deba almacenar algunos datos de los visitantes en cada sitio según los requisitos de su aplicación web. Siempre tenga en cuenta que las cookies se almacenan en el cliente y, según el nivel de seguridad de su navegador, se configura el tiempo de vida de las cookies, a veces puede no ser necesario.

Para explicar cómo Django maneja las cookies, creemos un sistema que utiliza la función de inicio de sesión creada anteriormente. El sistema le permitirá iniciar sesión por x minutos, después de lo cual la aplicación cerrará automáticamente su sesión.

Para esto, se deben configurar dos cookies: last_connection y username.

Primero, cambiemos la vista de inicio de sesión para almacenar el nombre de usuario y las cookies de última conexión −

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
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

As in the view above, cookies are set by calling the setcookie method, not the response request, and also note that all Cookie values are returned as strings.

Let's create a FormView for the login form, we will not display the form if the Cookie is set and10within seconds -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
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', {})

Puede acceder a los Cookie que ha configurado en la vista formView, a través de la propiedad de clase Cookies (diccionario) de la solicitud.

Ahora, modifique el archivo url.py para cambiar la URL, asocie la nueva vista -

# Nombre de archivo: example.py
# Derechos de autor: 2020 Por w3codebox
# Autor por: es.oldtoolbag.com
# Fecha: 2020-08-08
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 visitar /myapp/La conexión, entrará en la siguiente página-

Después de enviar, se redirigirá a la siguiente interfaz -

Ahora, si estás10segundos de acceso /myapp/La conexión se realiza una vez, se obtendrá una redirección directa a la segunda pantalla. Si accede de nuevo a /myapp/La conexión está fuera de este rango, se obtendrá el formulario de inicio de sesión (pantalla1)。