20 Mayıs 2014 Salı

Kullanıcılar

Dada önce yönetim panelinden bahsetmiştik. Django'da kullanıcıları yönetirken Yönetim Paneli'ni kullanabilirsiniz. Biz daha çok görünümler içerisinde bu kullanıcıları nasıl kullanacağımızdan bahsedeceğiz.
Gördüğünüz gibi şuanda sadece proje oluşturulurken Django'nun oluşturduğu root kullanıcısı bulunmaktadır. Görünümler oluştururken istediğimiz sayfaları sadece belli kullanıcıların görmesini, veya doktor ekleme işlemini belli kullanıcıların yapması gibi işlemler yapabiliriz. Bu tarz işlemler projemizin daha yönetilebilir olmasını sağlayacaktır.
Kullanıcı Nesneleri
Kullanıcılar üzerinde işlem yapabilmek için kullanıcı nesnelerini kullanacağız.
Varsayılan bir kullanıcının birincil nitelikleri şöyledir.
  • username
  • password
  • email
  • first_name
  • last_name
Kullanıcı Oluşturma
Dediğimiz gibi bu tarz işlemleri Yönetim Paneli'nden yapabilirsiniz. Fakat biz işin mantığını kavrayabilmek için Python kabuğundan devam edelim. İlk Python kabuğunu açalım ve ardından bir kullanıcı oluşturalım.
>>> from django.contrib.auth.models import User
>>> kullanici = User.objects.create_user('mazlum','mazlum@mail.com','1234')
>>> kullanici.first_name = 'Mazlum'
>>> kullanici.last_name = 'Ağar'
>>> kullanici.save()
Kullanıcıyı oluşturmak bu kadar basit. Burada firt_name,last_name özellikleri ile ad ve soyad tanımlaması yaptık. Kullanıcı oluştururken bunları tanımlamak zorunda değilsiniz.
Dikkat etmeniz gereken nokta User.objects.create_user metoduna verdiğimiz ilk parametre kullanıcı adı, ikinci parametre e-posta adresi, üçüncü parametre ise şifresidir. Eğer üçüncü parametreyi girmeden kullanıcı tanımlarsanız, şifresi oluşturulmamış bir kullanıcı olur. Şimdi Yönetim Panelinden oluşturduğumuz kullanıcıyı bir kontrol edelim.
Gördüğünüz gibi kullanıcımız oluşturuldu.
Var olan bir kullanıcıya ulaşmak için;
>>> kullanici = User.objects.get(username='mazlum')
Var olan bir kullanıcıyı silmek için;
kullanici.delete()
Tüm kullanıcılar listesine ulaşmak için;
User.objects.all()
Kullanıcı Onaylama
Bir kullanıcı ile giriş yapmak için kullanıcının oluşturulmuş olması yetmez. Kullanıcının onaylanması gerekir. Kullanıcıyı onaylamak için authenticate modülünü kullanabiliriz.
>>> from django.contrib.auth import authenticate
>>> kullanici = authenticate(username='mazlum',password='1234')
Kullanıcının onaylanıp onaylanmadığını kontrol edebiliriz.
>>> kullanici.is_authenticated()
True
Gördüğünüz gibi kullanıcı onaylanmış. Eğer yanlış bir kullanıcı adı veya parola girerseniz hata ile karşılaşırsınız.
Kullanıcının tam adını almak için;
>>> kullanici.get_full_name()
Mazlum Ağar
Son giriş yaptığı zamanı öğrenmek için;
>>> kullanici.last_login
datetime.datetime(2014, 1, 22, 16, 31, 15, 39486, tzinfo=<utc>)
Şifre Değiştirme
Bir kullanıcının şifresini değiştirmek için;
>>> from django.contrib.auth.models import User
>>> kullanici = User.objects.get(username='kullanici_adi')
>>> kullanici.set_password('yeni_parolas')
>>> kullanici.save()
Kullanıcı Girişi
Kullanıcı girişlerinden önce, yaptığımız tüm sayfaları yönetebileceğimiz bir yönetim sayfası hazırlayalım. Bunun için hastahane/urls.py dosyasına şu satırı ekleyelim.
url(r'^yonetim/',yonetim.views.yonetim)
Şimdi yonetim görünümünü tanımlayalım.
def yonetim(reqest):
 return render_to_response('yonetim.html')
Son olarak da yonetim şablonunu oluşturalım.
<!DOCTYPE html>
<html>
<head>
    <title>Yönetim İşlemleri</title>
    <link rel="stylesheet" type="text/css" href="/dosyalar/style.css" />
</head>
<body>

<h2>Yönetim İşlemleri</h2>
<div><a href="/doktorlar">Doktor İşlemleri</a></div>
<div><a href="/hasta-listesi">Hasta İşlemleri</a></div>
<div><a href="/poliklinik-likstesi">Poliklinik İşlemleri</a></div>

</body>
</html>
Artık sayfalara doğrudan ulaşabileceğimiz bir yönetim sayfamız var.
Şimdi gelelim asıl konumuza. Bir sayfa yaparken kullanıcının bu sayfayı görebilmesi için giriş yapmasını isteyebiliriz. Django tüm kullanıcı girişlerini otomatik olarak yapar. Kullanıcı girişleri için ön tanımlı olarak accounts/login, çıkış için ise accounts/logout adreslerini kullanır. Bu adresleri değiştirmek mümkündür. Fakat biz de bu adresler üzerinden çalışacağız. Şimdi hastahane/urls.py dosyasına şu satırları ekleyin.
 url(r'accounts/login/$','django.contrib.auth.views.login',
  {'template_name':'login.html'}),
 url(r'accounts/logout/$','django.contrib.auth.views.logout',
  {'next_page':'/accounts/login/'}),
İlk eklediğimiz url login sayfasına gidildiğinde login.html sayfasının yükleneceğini belirtiyor. İkinci yaptığımız işlem ise çıkış yapıldığında /accounts/login sayfasına yönlendirileceğini belirtiyor.
Şimdi login.html şablonunu yonetim/sablonlar içerisinde oluşturalım.
<!DOCTYPE html>
<html>
<head>
    <title>Yönetim Girişi</title>
    <link rel="stylesheet" type="text/css" href="/static/base.css" />
</head>
<body>
<h1>Kullanıcı Girişi</h1>

{% if form.errors %}
<div class="errornote">Kullanıcı adı veya parola hatalı.</div>
{% endif %}

<form method="POST">
{% csrf_token %}
<table>
    <tr>
        <td>{{form.username.label_tag}}</td>
        <td>{{form.username}}</td>
    </tr>
    <tr>
        <td>{{form.password.label_tag}}</td>
        <td>{{form.password}}</td>
    </tr>
</table>
<input type="submit" value="Giriş Yap" />

{% if next %}
    <input type="hidden" name="next" value="{{ next }}" />
{% else %}
    <input type="hidden" name="next" value="/yonetim/" />
{% endif %}
</form>

</body>
</html>


</body>
</html>
Giriş sayfasını tasarlamış olduk. Burada dikkatinizi çekmiştir. En son kontolünü yaptığımız next değişkeni, kullanıcının başka bir sayfadan giriş sayfasına yönlendirilip yönlendirilmediğini kontrol ediyor. Eğer kullanıcı başka bir sayfaya giriş yapmaya çalışırken giriş sayfasına yönlendirilmiş ise, giriş yaptıktan sonra tekrar o sayfaya yönlendirilecektir. Aksi durumda ise bizim belirttiğimiz yönetim sayfasına yönlendirilecektir. İleri de bunu daha iyi anlayacağız.
Şimdi daha önce hazırlamış olduğumuz yonetim.html sayfasına şu satırları ekleyelim. Bu satır ile giriş yapmış kullanıcının adını ve soyadını yazdırmış olacağız.
{% if request.user.is_authenticated %}
    <h3>Hoş geldin {{request.user.get_full_name}}</h3>
{% endif %}
Bu satırı eklemeden önce yonetim görünümünü şu şekilde değiştirin.
def yonetim(request):
 return render_to_response('yonetim.html',locals())
Ve aynı şablona kullanıcının çıkış yapabilmesi için çıkış bağlantısı ekleyelim.
<a href="/accounts/logout/">Çıkış</a>
İşlemlerimiz bu kadar. Tarayıcıdan http://localhost:8000/accounts/login/ yazdığınız zaman şu şekilde bir sayfa ile karşılaşacaksınız.
Burada eklediğiniz bir kullanıcı ile giriş yaptığınız zaman yönetim sayfasına yönlendirileceksiniz.
Kaynakça

0 yorum :

Yorum Gönder