18 Mayıs 2014 Pazar

Oturumlar ( Sessions)

Django oturumları, çerezleri kullanarak sağlar. İlk bağlanılmada 32 bit uzunluğunda rastgele 16 sistemde bir sayı oluşturulur. Bu çerez sonraki her bağlanmada istemciden sunucuya gönderilir. Django oturum bilgilerini bu çerezi anahtar kabul eden bir sözlükte tutar ve veritabanındaki django_session isimli tabloya kaydeder. Kullanıcı artık her bağlantı yaptığında çerez bilgileri ile veritabanındaki veriler kıyaslanır. Tabi ki tüm bunlar otomatik olarak Django tarafından yapılır. Biz oturum bilgilerini kaydedecek ve kullanıcının sonraki bağlantısında bu oturum bilgileri üzerinden işlemler yapacağız.
Oturum bilgileri çerezlerde olduğu gibi request.session nesnesinde saklanır. Tıpkı bir sözlük üzerinde çalışıyormuş gibi bu nesne üzerinde çalışabiliriz.
Şimdi daha önceki uygulamalarımıza dönerek oturumları kavrayalım. Hastahane uygulamamızda bulunan doktorları listelediğimiz bir görünümümüz vardı. Bu listede sıralama işlemi yaptıktan sonra herhangi bir doktoru düzenleyerek tekrar doktor listesine yönlendirdiğimizde eski haline geri geliyordu. İşte bu sorunu ortadan kaldırmak için oturumları kullanacağız.
##Sayfalama
def Doktor_listesi(request):
 ##kullanıcıdan gelen bir sıralama ölçütü var mı ona bakıldı
 if request.GET.get('siralama'):
  #var ise doktor_siralama oturumuna bu gelen değer atandı
  request.session['doktor_siralama'] = request.GET['siralama']
 #eğer doktor_siralama oturumu oluşturulmamışsa varsayılan olarak 1 değeri atandı
 if not 'doktor_siralama' in request.session:
  request.session['doktor_siralama'] = '1'
 
 #en son kriter olarak doktor_siralama oturumunun değeri kullanıldı.
 kiriter = request.session['doktor_siralama']
 
 sayfa = request.GET.get('sayfa',1)
 if kiriter:
  siralamaKriteleri = {
   '1':'adi',
   '2':'soyadi'
  }
  if kiriter in siralamaKriteleri:
   siralama = siralamaKriteleri[kiriter]

 doktorlar_tum = Doktor.objects.order_by(siralama)

 arama_formu = AramaFormu()
 if request.GET.get('aranacak_kelime'):
  arama_formu= AramaFormu(request.GET)
  if arama_formu.is_valid():
   aranacak_kelime = arama_formu.cleaned_data['aranacak_kelime']
   doktorlar_tum = Doktor.objects.filter(
   Q(adi__contains=aranacak_kelime) | Q(soyadi__contains=aranacak_kelime)
   )


 doktorlar_sayfalari = Paginator(doktorlar_tum,5)
 doktorlar = doktorlar_sayfalari.page(int(sayfa))
 doktor_sayisi = doktorlar_tum.count()
 return render_to_response('doktor_listesi.html',locals())
Burada yaptığımız işlemleri açıklama satırları ile açıklamaya çalıştık. Fakat tekrar üstünden geçelim. İlk önce kullanıcıdan gelen bir sıralama ölçütünün varlığını GET nesnesini kullanarak kontrol ettik. Eğer var ise şu satır ile
request.session['doktor_siralama'] = request.GET['siralama']
oturum oluşturduk. Gördüğünüz gibi bir sözlük anahtarına değer atamaktan hiç bir farkı yok. Eğer kullanıcıdan bir değer gelmemişse oturum oluşturulmayacaktır. Bu da varsayılan olarak yükleme yaparken hata ile karşılaşmamıza sebep olur. Bu yüzden oturumun oluşturulup oluşturulmadığını kontrol ettik. Eğer oluşturulmadı ise varsayılan olarak 1 değerini atadık.
Bu işlemleri yaptıktan sonra. Sıralama işlemini soyadına göre yapın. Daha sonra listedeki bir doktoru düzenle dedikten sonra düzenleyin. Otomatik olarak doktor listesine tekrar yönlendirilen sayfada sıralamanın soyadına göre olduğunu göreceksiniz. Tam da istediğimiz gibi değil mi?
Bu sayfadaki sayfalama işlemini de oturumlar ile yapmalıyız. Örneğin kullanıcı ikinci sayfada iken herhangi bir doktoru düzenler ise yönlendirme yapıldığında ilk sayfaya yönlendirilecektir. Bu da kullanıcının canını fazlası ile sıkar. Bu durumu engellemek için oturumları kullanacağız.
sayfa = request.GET.get('sayfa',1)
Satırı yerine aşağıdaki kodları yazıyoruz.
 if request.GET.get('sayfa'):
  request.session['doktor_sayfalama'] = request.GET['sayfa']
 if not 'doktor_sayfalama' in request.session:
  request.session['doktor_sayfalama'] ='1'
 sayfa = request.session['doktor_sayfalama']
Şimdi ikinci sayfada iken bir doktoru düzenlediğiniz zaman tekrardan ikinci sayfaya yönlendirileceksiniz. İşte bu şekilde bir sayfa tasarlamak daha kullanıcı dostudur. Bu yüzden sayfalarımızı tasarlarken kullanıcının canını sıkmayacak ve yormayacak şekilde tasarlamalıyız. Bu şekilde bir uygulama yapmak içinde oturumlar işimizi bir hayli kolaylaştırıyor.
Kaynakça

0 yorum :

Yorum Gönder