Django - Gestione dei cookie
A volte potresti voler memorizzare alcuni dati per visitatore del sito secondo i requisiti della tua applicazione web. Tieni sempre presente che i cookie vengono salvati sul lato client e, a seconda del livello di sicurezza del browser del tuo client, l'impostazione dei cookie a volte può funzionare ea volte no.
Per illustrare la gestione dei cookie in Django, creiamo un sistema utilizzando il sistema di accesso che abbiamo creato prima. Il sistema ti manterrà connesso per X minuti di tempo e oltre tale tempo sarai fuori dall'app.
Per questo, dovrai impostare due cookie, last_connection e nome utente.
Inizialmente, cambiamo la nostra vista di accesso per memorizzare il nostro nome utente e i 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
Come si vede nella vista sopra, l'impostazione dei cookie viene eseguita da set_cookie metodo chiamato sulla risposta, non sulla richiesta, e si noti inoltre che tutti i valori dei cookie vengono restituiti come stringa.
Creiamo ora un formView per il form di login, dove non visualizzeremo il form se il cookie è impostato e non è più vecchio di 10 secondi -
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', {})
Come puoi vedere nel form Visualizza sopra accedendo al cookie che hai impostato, avviene tramite l'attributo COOKIES (dict) della richiesta.
Ora cambiamo il file url.py per cambiare l'URL in modo che si accoppi con la nostra nuova 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'))
Quando accedi a / miaapp / connessione, otterrai la seguente pagina:
E verrai reindirizzato alla seguente schermata al momento dell'invio:
Ora, se provi di nuovo ad accedere a / miaapp / connessione entro 10 secondi, verrai reindirizzato direttamente alla seconda schermata. E se accedi nuovamente a / miaapp / connessione fuori da questo intervallo otterrai il modulo di accesso (schermata 1).