Django - Umgang mit Keksen
Manchmal möchten Sie möglicherweise einige Daten gemäß den Anforderungen Ihrer Webanwendung pro Site-Besucher speichern. Denken Sie immer daran, dass Cookies auf der Clientseite gespeichert werden. Abhängig von der Sicherheitsstufe Ihres Clientbrowsers kann das Setzen von Cookies manchmal funktionieren und manchmal auch nicht.
Um die Handhabung von Cookies in Django zu veranschaulichen, erstellen wir ein System mit dem zuvor erstellten Anmeldesystem. Das System hält Sie X Minuten lang angemeldet, und nach dieser Zeit sind Sie nicht mehr in der App.
Dazu müssen Sie zwei Cookies einrichten, last_connection und username.
Ändern wir zunächst unsere Anmeldeansicht, um unseren Benutzernamen und die Cookies für last_connection zu speichern.
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
Wie in der obigen Ansicht zu sehen ist, erfolgt das Setzen des Cookies durch das set_cookie Methode aufgerufen auf die Antwort nicht die Anfrage, und beachten Sie auch, dass alle Cookies-Werte als Zeichenfolge zurückgegeben werden.
Erstellen wir jetzt eine formView für das Anmeldeformular, in der das Formular nicht angezeigt wird, wenn das Cookie gesetzt ist und nicht älter als 10 Sekunden ist.
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', {})
Wie Sie in der obigen formView sehen können, erfolgt der Zugriff auf das von Ihnen gesetzte Cookie über das COOKIES-Attribut (dict) der Anforderung.
Ändern wir nun die Datei url.py, um die URL so zu ändern, dass sie mit unserer neuen Ansicht gepaart wird.
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'))
Wenn Sie auf / myapp / connection zugreifen, erhalten Sie die folgende Seite:
Und Sie werden beim Senden zum folgenden Bildschirm weitergeleitet -
Wenn Sie nun versuchen, im Bereich von 10 Sekunden erneut auf / myapp / connection zuzugreifen, werden Sie direkt zum zweiten Bildschirm weitergeleitet. Und wenn Sie außerhalb dieses Bereichs erneut auf / myapp / connection zugreifen, erhalten Sie das Anmeldeformular (Bildschirm 1).