Django - Gestion des cookies

Parfois, vous voudrez peut-être stocker certaines données par visiteur du site, conformément aux exigences de votre application Web. Gardez toujours à l'esprit que les cookies sont enregistrés côté client et qu'en fonction du niveau de sécurité de votre navigateur client, la configuration des cookies peut parfois fonctionner et parfois non.

Pour illustrer la gestion des cookies dans Django, créons un système en utilisant le système de connexion que nous avons créé auparavant. Le système vous gardera connecté pendant X minutes, et au-delà de ce délai, vous serez hors de l'application.

Pour cela, vous devrez configurer deux cookies, last_connection et le nom d'utilisateur.

Dans un premier temps, changeons notre vue de connexion pour stocker notre nom d'utilisateur et les cookies 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

Comme on le voit dans la vue ci-dessus, la configuration du cookie est effectuée par le set_cookie méthode appelée sur la réponse et non sur la demande, et notez également que toutes les valeurs de cookies sont renvoyées sous forme de chaîne.

Créons maintenant un formView pour le formulaire de connexion, où nous n'afficherons pas le formulaire si le cookie est défini et n'a pas plus de 10 secondes -

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', {})

Comme vous pouvez le voir dans le formulaire ci-dessus, l'accès au cookie que vous avez défini se fait via l'attribut COOKIES (dict) de la demande.

Modifions maintenant le fichier url.py pour changer l'URL afin qu'il s'associe à notre nouvelle vue -

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'))

Lors de l'accès à / myapp / connection, vous obtiendrez la page suivante -

Et vous serez redirigé vers l'écran suivant lors de la soumission -

Maintenant, si vous essayez à nouveau d'accéder à / myapp / connection dans la plage de 10 secondes, vous serez redirigé directement vers le deuxième écran. Et si vous accédez à nouveau à / myapp / connection hors de cette plage, vous obtiendrez le formulaire de connexion (écran 1).