Django - Oturumlar
Daha önce tartışıldığı gibi, web uygulaması için birçok yararlı veriyi depolamak için istemci tarafı çerezleri kullanabiliriz. Web uygulamamız için yararlı olan çeşitli verileri depolamak için müşteri tarafındaki çerezleri kullanabileceğimizi daha önce görmüştük. Bu, kaydetmek istediğiniz verilerin önemine bağlı olarak birçok güvenlik açığına neden olur.
Güvenlik nedenleriyle, Django'nun tanımlama bilgilerini işlemek için bir oturum çerçevesi vardır. Oturumlar, çerezlerin alınmasını ve gönderilmesini özetlemek için kullanılır, veriler sunucu tarafında (veritabanında olduğu gibi) kaydedilir ve istemci tarafındaki çerezde tanımlama için yalnızca bir oturum kimliği bulunur. Oturumlar ayrıca, kullanıcı tarayıcısının çerezleri 'kabul etmeyecek' şekilde ayarlandığı durumlardan kaçınmak için de yararlıdır.
Oturumları Ayarlama
Django'da, projenizde etkinleştirme oturumu yapılır settings.py, bazı satırlar ekleyerek MIDDLEWARE_CLASSES ve INSTALLED_APPSseçenekler. Bu, proje oluşturulurken yapılmalıdır, ancak bilmek her zaman iyidir, bu nedenleMIDDLEWARE_CLASSES olmalı -
'django.contrib.sessions.middleware.SessionMiddleware'
Ve INSTALLED_APPS olmalı -
'django.contrib.sessions'
Varsayılan olarak, Django oturum bilgilerini veritabanına (django_session tablosu veya koleksiyon) kaydeder, ancak motoru aşağıdaki gibi diğer yolları kullanarak bilgileri depolayacak şekilde yapılandırabilirsiniz: file veya içinde cache.
Oturum etkinleştirildiğinde, her isteğin (Django'daki herhangi bir görünümün ilk argümanı) bir oturum (dict) özniteliği vardır.
Oturumları nasıl oluşturup kaydedeceğinizi görmek için basit bir örnek oluşturalım. Daha önce basit bir oturum açma sistemi oluşturduk (Django form işleme bölümüne ve Django Çerezleri İşleme bölümüne bakın). Kullanıcı adını bir çereze kaydetmemize izin verin, böylece çıkış yapmadıysanız, giriş sayfamıza erişirken giriş formunu görmeyeceksiniz. Temel olarak Django Çerezleri işlerken kullandığımız oturum açma sistemimizi, çerezleri sunucu tarafında kaydederek daha güvenli hale getirelim.
Bunun için önce kullanıcı adı çerez sunucu tarafımızı kaydetmek için oturum açma görünümümüzü değiştirelim -
def login(request):
username = 'not logged in'
if request.method == 'POST':
MyLoginForm = LoginForm(request.POST)
if MyLoginForm.is_valid():
username = MyLoginForm.cleaned_data['username']
request.session['username'] = username
else:
MyLoginForm = LoginForm()
return render(request, 'loggedin.html', {"username" : username}
O halde, oturum açma formu için formView görünümü oluşturalım, burada tanımlama bilgisi ayarlanmışsa formu göstermeyeceğiz -
def formView(request):
if request.session.has_key('username'):
username = request.session['username']
return render(request, 'loggedin.html', {"username" : username})
else:
return render(request, 'login.html', {})
Ş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ı göreceksiniz -
Ve aşağıdaki sayfaya yönlendirileceksiniz -
Şimdi / uygulamam / bağlantıma tekrar erişmeyi denerseniz, doğrudan ikinci ekrana yönlendirileceksiniz.
Çerezimizi silen basit bir çıkış görünümü oluşturalım.
def logout(request):
try:
del request.session['username']
except:
pass
return HttpResponse("<strong>You are logged out.</strong>")
Ve bunu myapp / url.py'deki bir çıkış URL'si ile eşleştirin
url(r'^logout/', 'logout', name = 'logout'),
Şimdi, / uygulamam / oturum kapat'a erişirseniz, aşağıdaki sayfayı alacaksınız -
/ Uygulamam / bağlantıya tekrar erişirseniz, giriş formunu (1. ekran) alacaksınız.
Oturumları Kullanan Daha Olası Bazı İşlemler
Bir oturumu nasıl depolayacağımızı ve erişeceğimizi gördük, ancak isteğin oturum özniteliğinin aşağıdakiler gibi başka yararlı eylemleri olduğunu bilmek güzel:
set_expiry (value) - Seans için sona erme süresini ayarlar.
get_expiry_age() - Bu oturumun bitmesine kadar geçen saniye sayısını döndürür.
get_expiry_date() - Bu oturumun sona ereceği tarihi döndürür.
clear_expired() - Süresi dolan oturumları oturum deposundan kaldırır.
get_expire_at_browser_close() - Kullanıcının web tarayıcısı kapatıldığında kullanıcının oturum tanımlama bilgilerinin süresinin dolup dolmadığına bağlı olarak Doğru veya Yanlış döndürür.