26 Mayıs 2014 Pazartesi

Görünümlerin Gizlenmesi

Kullanıcıya giriş yaptırdık. Ardında da kullanıcıyı yönetim sayfasına yönlendirdik. Şimdi kullanıcı girişi yapmadan tarayıcıya http://localhost:8000/yonetim/ yazın ve girin. Yönetim sayfasına ulaştınız değil mi? Bu durumun böyle olmaması gerekiyor. Şimdi bunun önüne geçeceğiz. Sadece giriş yapmalarını istediğimiz görünümlerin başına aşağıdaki kod parçasını yazmamız gerekiyor. Şimdi bunu yonetim görünümü için yapalım.
if not request.user.is_authenticated():
 return HttpResponseRedirect('/accounts/login/?next=%s' % request.path)
-
Yönetim görünümünün başına bu kodları yazdıktan sonra giriş yapmadan yönetim sayfasına ulaşmaya çalışın. Giriş sayfasına yönlendirildiniz değil mi? Biz burada kullanıcıyı giriş sayfasına yönlendirdik. Eğer isterseniz, oluşturduğunuz bir hata sayfasına da yönlendirme yapabilirsiniz.
 if not request.user.is_authenticated():
  return render_to_response('hata.html')
Ama bu işlem biraz uzun olduğu için her seferinde bu satırları yazmak biraz canınızı sıkabilir. Şimdi gelin Django'nun bize sağlamış olduğu müthiş bir kolaylıktan yararlanalım. Bunun için login_required modülünü kullanacağız. İlk önce yonetim/views.py dosyasının en başında bu modülü içe aktaralım.
from django.contrib.auth.decorators import login_required
Şimdi yapmamız gereken tek şey gizlemek istediğimiz görünümden hemen önce @login_required ifadesini eklemek.
@login_required
def yonetim(request):
 return render_to_response('yonetim.html',locals())
Django işimizi çok kolaylaştırdı. Sadece giriş yapmış kullanıcıların görmesini istediğiniz her görünüm için bu yöntemi uygulayabilirsiniz.
@login_required()
def Doktor_listesi(request):
 if request.GET.get('siralama'):
  request.session['doktor_siralama'] = request.GET['siralama']
 if not 'doktor_siralama' in request.session:
Giriş yapmadan tarayıcıdan localhost:8000/doktorlar adresine gidin. Django sizi giriş sayfasına yönlendirdi. Şimdi tarayıcının adres çubuğunu inceleyin. http://localhost:8000/accounts/login/?next=/doktorlar/ adresini görüyor olacaksınız. İşte buradaki next değeri bizim hangi sayfadan yönlendirildiğimizi tutuyor. Eğer giriş yaparsanız doğrudan o sayfaya yönlendirileceksiniz. Bu işlemin yapılmasını daha öncede login.html şablonunda yazdığımız şu satırlar sağlıyor.
{% if next %}
    <input type="hidden" name="next" value="{{ next }}" />
{% else %}
    <input type="hidden" name="next" value="/yonetim/" />
{% endif %}
</form>
Şimdi giriş yapın. Doğrudan doktorlar sayfasına yönlendirileceksiniz. Bazen her kullanıcının görmesini istemediğimiz sayfalar olabilir. Örneğin yonetim sayfasını sadece yöneticinin görmesini isteyebiliriz. Şimdi bunu nasıl yapabiliriz ona bakalım. Aynı şekilde ilk uzun yoldan yapalım.
if not "yonetici" in request.user.username:
 return HttpResponseRedirect('/accounts/login/?next=%s' % request.path)
-
Bu kod parçasını yonetim görünümünün başına eklediğimizde eğer giren kullanıcının kullanıcı adı yonetim değilse tekrardan giriş sayfasına yönlendirecek. Bu işlemi yapmak için de Django bize kolaylık sağlıyor. Bu şekilde bir kontrol için de user_passes_test modülünü kullanacağız.
from django.contrib.auth.decorators import user_passes_test

def kullanici_kontrol(user):
 return "yonetici" in user.username

@user_passes_test(kullanici_kontrol)
def yonetim(request):
 return render_to_response('yonetim.html',locals())
login_required modülü anonim kullanıcılar içindir. Tek umursadığı şey herhangi bir kullanıcının giriş yapmış olmasıdır. Eğer bir kullanıcı giriş yapmışsa o görünümü görebilir. Eğer kullanıcılar arasında da ayrım yapmak istersek o zaman user_passes_test modülünü kullanmalıyız. Bu modül içerisine parametre olarak işlev alır. Kullanıcı kontrolünü de bu işlev içerisinde yapabiliriz. İstediğiniz her şey için filtreleme yapabilirsiniz. Kullanıcı adı,kullanıcının ilk adı, kullanıcının kayıt olduğu tarih vb.
Görünüm gizlemeyi doğrudan hastahane/urls.py dosyasında da yapabiliriz.
#hastahane/urls.py dosyasının başına ekliyoruz.
from django.contrib.auth.decorators import login_required
url(r'^hasta-ekle/',
  login_required(yonetim.views.hasta_ekleme)),
hasta_ekleme görünümü sadece giriş yapmış kullanıcıların görmesini sağladık.
Kaynakça

0 yorum :

Yorum Gönder