Django - obsługa plików cookie

Czasami możesz chcieć przechowywać niektóre dane dla poszczególnych odwiedzających witrynę, zgodnie z wymaganiami Twojej aplikacji internetowej. Zawsze pamiętaj, że pliki cookie są zapisywane po stronie klienta iw zależności od poziomu bezpieczeństwa przeglądarki klienta, ustawienie plików cookie może czasami działać, a czasami nie.

Aby zilustrować obsługę plików cookie w Django, stwórzmy system z wykorzystaniem systemu logowania, który stworzyliśmy wcześniej. System utrzyma Cię w stanie zalogowania przez X minut, a po tym czasie nie będziesz już korzystać z aplikacji.

W tym celu musisz ustawić dwa pliki cookie, last_connection i nazwę użytkownika.

Najpierw zmieńmy widok logowania, aby przechowywać naszą nazwę użytkownika i pliki cookie 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

Jak widać na powyższym widoku, ustawienie pliku cookie jest wykonywane przez set_cookie wywoływana w odpowiedzi, a nie na żądaniu, a także pamiętaj, że wszystkie wartości plików cookie są zwracane jako ciąg.

Stwórzmy teraz formView dla formularza logowania, w którym nie będziemy wyświetlać formularza, jeśli plik cookie jest ustawiony i nie jest starszy niż 10 sekund -

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

Jak widać na powyższym formView, dostęp do ustawionego pliku cookie odbywa się za pośrednictwem atrybutu COOKIES (dict) żądania.

Teraz zmieńmy plik url.py, aby zmienić adres URL, aby sparował się z naszym nowym widokiem -

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

Podczas uzyskiwania dostępu do / myapp / connection otrzymasz następującą stronę -

Po przesłaniu zostaniesz przekierowany do następującego ekranu -

Teraz, jeśli spróbujesz ponownie uzyskać dostęp do / myapp / connection w ciągu 10 sekund, zostaniesz przekierowany bezpośrednio na drugi ekran. A jeśli ponownie uzyskasz dostęp do / myapp / connection poza tym zakresem, otrzymasz formularz logowania (ekran 1).