11 Haziran 2014 Çarşamba

Kullanıcılar


Merhaba arkadaşlar,

Bu gün sizlere Django'da kullanıcıları anlatacağım. Geçen haftalarda oturumları öğrenmiştik. Oturumları tarayıcıdan gelen birden fazla isteğe yol tayin etmede kullanıyorduk. Kullanıcıları denetlerken ise oturumları kullanacağız. Yani sisteme giriş yapan kullanıcıyı ya da kendisinin kullanıcı olduğunu iddaa eden sahte kullanıcıları, oturumları kullanarak doğrulama yoluna gideriz. Bu yüzden Django bize bunları denetlerken yardımcı olması için bazı araçlar(tools) sağlar. Buna Django'nun kimlik doğrulama ve yetkilendirme sistemi de diyebiliriz. Django kimlik doğrulama ve yetkilendirme sistemi ; kullanıcı hesaplarını, grupları, izinleri ve çerez tabanlı kullanıcı oturumlarını yönetmemizde bize yardımcı olur. Sistemin isminden de anlaşılacağı üzere iki aşamalı bir sistemden bahsediyoruz (doğrulama-yetkilendirme).



  1. Doğrulama; kullanıcı kimlik doğrulamasını yapar. Kullanıcılar veritabanından kullanıcı adı ve parolayı kontrol ederek yapar
  2. Yetkilendirme , kullanıcının verilen işlem için yetkili olup olmadığını kontrol eder. 

Yetkilendirmeyi Etkinleştirme  Desteği

Django'da kullanıcı etkinleştirme ve yetkilendirme desteğini almak için bir Django uygulaması olarak paketlenen django.contrib paketinin yüklü olması gerekir. Bu paket varsayılan olarak yüklenir. Bunu projenizin  settings.py  dosyasında INSTALLED_APPS listesinde 'django.contrib.auth' ve 
MIDDLEWARE_CLASSES listesinde 'django.contrib.auth.middleware.AuthenticationMiddleware'
elemanlarının ekli olduğunu kontrol edebilirsiniz. 

Peki bunları görünümlerde nasıl kullanacağız ? 

Geçen hafta oturum bilgilerine request.session nesnesini kullanarak erişebildiğimizi öğrenmiştik.
Burda da kullanıcı bilgileri request.user nesnesine kaydedilir, bu nesne o an giriş yapmış olan kullanıcı 
bilgilerini tutar. Eğer kullanıcı giriş yapmamış ise ise request.user nesnesi yerine AnonymousUser nesnesini kullanacağız. 

Kullanıcı girişinin doğrulanıp doğrulanmadığını ise aşağıdaki gibi is_authenticated() fonksiyonunu
kullanarak kontrol edebiliriz : 
if request.user.is_authenticated():
    # Giriş yapmış olan kullanıcı için                                                   # birşeyler yap
else:
    # Anonim kullanıcı için birşeyler yap

Şimdi kullanıcı nesnesine ait bazı kullanıcı  alan adları ve tanımlarına bakalım : 

alantanım
usernameGerekli; 30 karakter ya da daha az olmalı.
Sadece alfanümerik karakterleri destekler (harf, rakam, ve alt çizgi).
first_nameİsteğe bağlı ; 30 karakter ya da daha az.
last_nameİsteğe bağlı; 30 karakter ya da daha az.
emailİsteğe bağlı. E-posta adresi
passwordGerekli. Detaylı bilgi için tıklayın.
is_staffMantıksal. Kullanıcının yönetici sitesine erişip erişemeyeceğini belirler.
is_activeMantıksal. Hesabın aktif olup olmadığını kontrol eder.
is_superuserMantıksal. 
last_loginKullanıcının son oturum tarihi
date_joinedKullanıcının oluşturulma tarihi 

Şimdi kullanıcı nesnesine ait bazı fonksiyonlara bakalım : 

FonksiyonTanımı
is_authenticated()Gerçek kullanıcı nesneleri için True döndürür. Hesabın doğrulanmış olup olmadığı bilgisini verir.

is_anonymous()AnonymousUser nesneleri için True döndürür.
is_authenticated()fonksiyonu tercih edilmelidir
get_full_name()Kullanıcının first_name ve last_name alan değerlerini
aralarında bir boşluk ile döndürür.
set_password(passwd)Kullanıcı parolasını verilen değerle değiştirir.Değiştirilen parolayı kullanıcıya kaydetmez.
check_password(passwd)Kullanıcı parolasının doğruluğunu kontrol eder.
email_user(subj, msg)Kullanıcıya e-posta gönderir. Ayrıca bu fonksiyona from_email alanını da ekleyip postanın
kimden gittiği bilgisini de ekleyebilirsiniz. 


Görünümde Kullanıcı Giriş/ Çıkış 

Görünümde kullanıcı girişi yapmak için login() fonksiyonu kullanılır. Bu fonksiyon bir HttpRequest 
nesnesi ve kullanıcı nesnesini alır, daha sonra  kullanıcı oturumuna kaydeder.


Kullanıcı girişi görünüm örneği : 
from django.contrib import auth

def giris_görünümü(request):                                                                      
    kullanici_adi= request.POST.get('username', '')
    parola = request.POST.get('password', '')                                                                                                                                 # Kullanıcı oluştur
    kullanici = auth.authenticate(username=kullanici_adi, password=parola )             
    if kullanici is not None and kullanici.is_active:
        # Doğru parola, ve kullanıcı aktif
        auth.login(request, kullanici )
        # "Giriş yapıldı" sayfasına yönelt
        return HttpResponseRedirect("/account/loggedin/")
    else:
        # Hata sayfası göster
        return HttpResponseRedirect("/account/invalid/")                                      

Kullanıcı çıkışı yapmak için çıkış görünümde django.contrib.auth.logout() kullanılır. 
Bu fonksiyon bir  HttpRequest nesnesi alır ve hiç bir değer döndürmez.

Kullanıcı çıkışı görünüm örneği : 
from django.contrib import auth

def cikis_görünümü (request):
    auth.logout(request)
    # Başarı ile çıkış yapıldı.
    return HttpResponseRedirect("/account/loggedout/")

Eğer kullanıcı giriş yapmamış ise auth.logout() fonksiyonu hiç bir hata yükseltmez.

(Devam edecektir...)



Referanslar :
  1. https://docs.djangoproject.com/en/dev/topics/auth/
  2. http://www.djangobook.com/en/2.0/chapter14.html


Hiç yorum yok:

Yorum Gönder