Django - Tanımlama bilgilerini kullanma
Bazen web uygulamanızın gereksinimlerine göre bazı verileri site ziyaretçi bazında depolamak isteyebilirsiniz. Çerezlerin istemci tarafında kaydedildiğini ve istemci tarayıcınızın güvenlik düzeyine bağlı olarak, çerez ayarlamanın bazen işe yarayabileceğini ve bazen işe yaramayabileceğini daima unutmayın.
Django'da çerezlerin işlenmesini göstermek için, daha önce oluşturduğumuz oturum açma sistemini kullanarak bir sistem oluşturalım. Sistem, X dakika boyunca oturumunuzu açık tutacak ve bu sürenin ötesinde, uygulamanın dışında kalacaksınız.
Bunun için last_connection ve kullanıcı adı olmak üzere iki çerez ayarlamanız gerekecektir.
İlk olarak, kullanıcı adımızı ve last_connection çerezlerimizi saklamak için giriş görünümümüzü değiştirelim -
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
Yukarıdaki görünümde görüldüğü gibi, tanımlama bilgisi ayarı, set_cookie yöntem istek değil yanıta çağrılır ve ayrıca tüm tanımlama bilgileri değerlerinin dize olarak döndürüldüğünü unutmayın.
Şimdi, oturum açma formu için bir formView oluşturalım; tanımlama bilgisi ayarlanmışsa ve 10 saniyeden eski değilse formu görüntülemeyeceğiz -
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', {})
Yukarıdaki formView'da görebileceğiniz gibi ayarladığınız tanımlama bilgisine erişim, isteğin COOKIES özniteliği (dict) aracılığıyla yapılır.
Şimdi, URL'yi yeni görünümümüzle eşleşecek şekilde değiştirmek için url.py dosyasını değiştirelim -
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'))
/ Uygulamam / bağlantısına eriştiğinizde, aşağıdaki sayfayı alacaksınız -
Ve gönderildiğinde aşağıdaki ekrana yönlendirileceksiniz -
Şimdi, 10 saniye aralığında / uygulamam / bağlantıya tekrar erişmeye çalışırsanız, doğrudan ikinci ekrana yönlendirileceksiniz. Ve / uygulamam / bağlantıya bu aralıktan tekrar erişirseniz, giriş formunu (1. ekran) alacaksınız.