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).

8 Haziran 2014 Pazar

Django'da Oturumlar (Sessions)


          Django; oturumları (session), çerezleri kullanarak sağlar.  İstemcinin sunucuya ilk bağlanmasında 32 bit uzunluğunda onaltılık sayı sistemde rastgele üretilmiş bir sayı oluşturulur, sessionid (örn: ac514a03cbd1f2343c22ed3bd2ba8y76.  Bu sessionid daha sonra yapılacak her bağlanmada istemciden sunucuya gönderilir. Django oturum bilgilerini bu sessionid 'yi 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. Ayrıca oturum bilgileri sözlük gibi davranan request.session nesnesinde saklanır. Tabiki tüm bunlar otomatik olarak Django tarafından yapılır. Bize sadece oturum bilgilerini kullanarak işlemlerimizi yapmak kalır. Örnek vermek gerekirse :

30 Mayıs 2014 Cuma

Django'da Çerez Kullanımı


       Bilgisayar terimi olarak çerez ; kullanılan web sayfaların sunucularının, kullanıcı bilgisayarının hard diskine yerleştirdiği ufak bir text dosyasıdır. Yani, çerez; web sitesinin bir sonraki ziyarette kullanıcıyı tanıması için geçerli bilgidir. Bu text dosyası bir komut dosyası olmadığı gibi, virüs de değildir. Kullanıcıya özel bir tanımlamadır ve sadece çerezi tanımlayan web sunucusu tarafından okunabilir.


23 Mayıs 2014 Cuma

Modellerden Form Oluşturma


      Django'da bir veritabanına dayalı bir uygulama geliştirildiğinde Django modellerini ve bu modellere biçim olarak  yakın olan formları kullanırız. Örneğin, daha önce oluşturduğumuz okul projesinde öğretim görevlilerine ait modelimiz aşağıdaki gibiydi :

...
class OgretimElemani(models.Model):
    UNVAN_SECENEKLERI=(('AG', u'Araştırma Görevlisi'),
                       ('DR', u'Doktor'),
                       ('YD', u'Yardımcı Doçent Doktor'),
                       ('DD', u'Doçent Doktor'),
                       ('PD', u'Profesör Doktor'),
                       )
    unvani = models.CharField(max_length = 2, choices= UNVAN_SECENEKLERI,
                              blank=True , verbose_name='Unvanı')
    adi = models.CharField(max_length =50, verbose_name='Adı')
    soyadi = models.CharField(max_length =50,verbose_name='Soyadı')
    telefonu = models.CharField(max_length =10,blank=True,
                                verbose_name='Telefon Numarası')
    e_posta_adresi = models.EmailField(blank = True,verbose_name='E-Posta Adresi')

    def __unicode__(self):
        return u'%s, %s' %(self.soyadi,self.adi)
    class Meta:
        ordering =['soyadi']

...


Daha sonra bu modelde tanımlı alan türlerini formumuzda tekrar tekrar yazıyorduk.

15 Mayıs 2014 Perşembe

Django'da Arama Formu Oluşturma

       Arama formları, verinin çok kabardığı durumlarda kullanıcıların istenilen veriye daha kısa yoldan ulaşması için tasarlanan formlardır. Hepimizin kullandığı arama motorlarını buna örnek olarak verebiliriz. 

       Bu gün burada, kendi yaptığımız bir uygulamaya arama formu nasıl eklenir sorusuna cevap vermek istiyorum. Geçen haftalarda üzerinde çalıştığımız okul projesinde öğretim elemanlarımıza ait bir listemiz vardı, bu liste biz her yeni bir öğretim görevlisi eklediğimizde büyüyecektir ve veri kümemiz büyüdükçe aradığımızı bulmamız daha güç hal alacaktır. Şimdi öğretim elemanları listemize bir arama formu ekleyelim. 

      Arama formunu oluşturmak için  ...\okul\yonetim\forms.py dosyasına arama formumuzu aşağıdaki gibi ekleyelim :

forms.py
...

class AramaFormu(forms.Form):

    aranacak_kelime = forms.CharField()

    def clean_aranacak_kelime(self):
        kelime = self.cleaned_data['aranacak_kelime']
        if len(kelime) < 3:
            raise forms.ValidationError('Aranacak kelime 3 harften az olamaz !..')
        return kelime


26 Nisan 2014 Cumartesi

Django'da Sayfalama (Pagination)


Merhaba Arkadaşlar,

Bu hafta sizlere Django'da sayfalama (pagination) hakkında bilgi vermek istiyorum. Bildiğiniz üzere web sitelerinde sayfalama genel olarak içeriğin uzun olduğu durumlarda kullanıcıya daha kullanabilir sayfalar üretmek için içeriğin belli mantıksal kısımlara ayrılmasıdır. Genelde arama sonuç sayfalarında, günlük(blog) sitelerinde, uzun içeriğe sahip makalelerde uygulamalarına rastlarız.


Sayfalama alanları genel olarak sitede gezinme alanlarının (navigation) bir parçasıdır. Sitedeki kullanılabilirliği ve düzeni sağlayan normal menü yapılarının dışındaki yapılardır. Sayfalama yaparken aşırıya kaçıp görünüşü çok hoş olsun diye kullanıcıyı zora sokan tasarımlardan kaçınmak gerekir. Sayfalamada önemli olan kullanıcı dostu ve işlevsel bir yapı oluşturmaktır, ondan sonra görsellik gelir. Elbette işlevselliği kaybetmeden görsellikde geliştirilebilir. 
Google sayfalama

Yandex sayfalama


20 Nisan 2014 Pazar

Django Bootstrap

Merhaba Arkadaşlar,

Bu hafta sizlere Django Bootstrap hakkında bilgi vermek istiyorum.
Bootstrap için; daha hızlı ve daha kolay kullanımıyla, şık, sezgisel ve güçlü bir mobil web geliştirme çatısı diyebiliriz. Bildiğiniz gibi web tasarımı zevkli bir iş olmasına karşın çok vakit alan bir iştir. Ayrıca vaktin yeterli olmadığı zamanlarda tam bir işkence haline dönüştüğü de olabiliyor. İşte tam burada Bootstrap devreye giriyor. "Kullanımı kolay, sonucu güzel olsun." diyen biz yazılımcılara hitap eden güzel bir kütüphane.

Şimdi Bootstrap'i kuralım. Tabi bundan önce bilgisayarımızda pip'ın kurulu olması gerekiyor.

7 Nisan 2014 Pazartesi

Django'da Formlar - III

Merhaba Arkadaşlar,

Geçen hafta Django formlarını, Django form denetimi ve formların görünümlerle kullanılması gibi konuları öğrendik. Bu hafta ise geçen hafta yaptığımız işlemleri bir adım daha öne taşıyalım. Yani eklenen kayıtların düzenlenmesi, silinmesi ve sıralanmasına bakalım.


KAYIT DÜZENLEME

Şimdi daha önceden tanımlanmış kayıtların düzenlenmesine bakalım. Django burada da bize kolaylık sağlıyor. Bunun için var olan form'a initial argümanını vermemiz yeterli olacaktır.

25 Mart 2014 Salı

Django'da Formlar - II

Merhaba Arkadaşlar,

Bir önceki blogumda sizlere genel olarak formları anlatmıştım. Burada ise Django'da form mantığını anlatacağım. Bu blogda yapacaklarımızı gördükten sonra aslında geçen blogda yaptıklarımızın bizlere fazladan iş yükü olduğunu göreceğiz. Haydi Django'nun bize ne gibi kolaylıklar sağladığına bakalım. 

Django modelleri kullanarak formları hazırlar. Tüm denetimleri kendisi yapar. Bu ikinci cümlem biraz uçuk gözükebilir ama öyle. Denetimleri kendisi yapıyor, bize sadece kullanmak kalıyor. Bunu bir örnek ile inceleyelim. formlar modeller üzerine kurulur ve uygulama-dosyası/proje-dosyası konumunda forms.py dosyasında belirtilir. Geçen haftalarda üzerinde çalıştığımız okul projesinde Öğretim elemanları için bir form hazırlayalım. Bunun için okul/yonetim/forms.py dosyasını oluşturup aşağıdaki satırları dosyaya yazalım : 


# -*- coding: utf-8 -*-

from django import forms

class OgretimElemaniFormu(forms.Form):
    adi = forms.CharField()
    soyadi = forms.CharField()
    telefonu= forms.CharField(required = False )
    e_posta_adresi = forms.EmailField(required = False)


15 Mart 2014 Cumartesi

Django'da Formlar - I

Merhaba Arkadaşlar,

Bu hafta sizlere Django'da formları anlatacağım. Etkileşimli web sayfaları hazırlamanın yolu FORM kullanmaktan geçer. Web'in en kullanışlı niteliği ve belki de internet üzerindeki öteki servislere göre daha yaygın olmasının nedeni formlardır. Örneğin: e-bankacılık, e-sigortacılık, e-ticaret, e-eğitim,... gibi etkileşimli her işte form kullanılır. Formlar, kullanıcıdan veri (bilgi) almak için düzenlenir. 


Ayrıca formlar web geliştiricileri için en sıkıcı elemanlardır. Oldukça basit bir mantığı olmasına karşın sürekli aynı işlerin yapılması programcıları bıktırır. Eğer Django kullanmıyorsanız kullanıcıdan gelen verinin denetimi, uygun veri gelmediğinde tekrar kullanıcıya (bir önceki gönderisi ile doldurulmuş) formu göstermek gibi bir takım benzer ve sıkıcı işler sizi bekliyor demektir. Django web formlarının otomatik olarak üretilmesini sağladığından böyle sıkıcı işlerle uğraşmanıza gerek kalmaz. 

Öncelikle işleyişin nasıl olduğunu anlamak için GET ve POST yöntemleri arasındaki farkı ve standart HTML formlarını inceleyelim.



GET ve POST

Kullanıcı veriyi size iki yöntemle gönderebilir: GET ve POST. İki yöntemle de kullanıcıdan veri almak mümkün. Ancak aralarında belli başlı farklar var. Örneğin GET ile veri alırsanız tüm veri tarayıcının adres çubuğunda görünür ve boyutu yaklaşık olarak 2KB civarıdır.

16 Ocak 2014 Perşembe

Yönetim (Admin) Paneli

Merhaba arkadaşlar,

Bu gün sizlere Django'nun kullanıcılarına sunduğu bir diğer kolaylık olan yönetim panelini anlatmak istiyorum. Özellikle veritabanına veri ekleme, silme ve güncelleme rahatlığı sağladığı için çoğu kullanıcı tarafından tercih edilmektedir. Yönetim panelini bir kaç adımda etkinleştirebiliriz. Bu etkinleştirme olayını geçen haftalarda yaptığımız okul veritabanı projesi için yapalım. Öncelikle settings.py  dosyasında INSTALLED_APPS değişkeninde yorum satırı koyduğumuz uygulamaları ve django.contrib.admin uygulamasını etkinleştirelim. Burda etkinleştirmekten kasıt satır başlarında bulunan yorum (#) işaretlerini  kaldıralım. Son hali aşağıdaki gibi olacaktır :

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'yonetim',
)

Sonra urls.py dosyasında admin panelini etkinleştirmek için aşağı iki satırdaki yorumları kaldıralım :

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()


Ve aynı dosyada admin url'ini etkinleştirelim. Diğer bir değişle urlpatterns değişkeninde bulunan aşağıdaki satırın başındaki yorum işaretini (#) kaldıralım:


 # Uncomment the next line to enable the admin:
     url(r'^admin/', include(admin.site.urls)),


Şimdi de veritabanında yönetim paneli için gerekli olan tabloları ve yönetici kullanıcısını oluşturalım. Aşağıdaki komutu komut satırında çalıştırdığımızda bize yetkili kullanıcıyı olıştrumak istetiğimizi soracaktır. yes cevap verelim. Ardından bizden kullanıcı adını, e-posta edresini ve parola eklememizi isteyecektir. Parolalar yazarken görünmeyecektir.


>python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions 
Creating table auth_user_groups
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
You just installed Django's auth system, which means you don't have any
superusers defined.
Would you like to create one new? (yes/no): yes
Username(leave blank to use 'kullanıcı adınız'):
E-mail address: mail_adresiniz@mail.com
Password:
Password(again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)


Ve son olarak kendi uygulamamızı yönetici panelinden kullanmak üzere yonetim/admin.py dosyasını oluşturup içerisini aşağıdaki satırları ekleyelim :


from django.contrib import admin
from yonetim.models import *

admin.site.register(OgretimElemani)
admin.site.register(Ders)
admin.site.register(Ogrenci)




Bundan sonra herhangi bir uygulama verilerini yönetmek için sadece uygulama klasörüne admin.py dosyasını oluşturup tanımlamamız yeterli olacaktır. Şimdi sunucuyu çalıştırıp tarayıcımızdan admin sayfasına gidelim.

C:\...\DjangoProjeleri\okul>python manage.py runserver

-----------------------------------------------------------------------------------------------------
http://localhost:8000/admin/
-----------------------------------------------------------------------------------------------------

Giriş ekranında sizden kullanıcı adı ve parola soracaktır.




















Gördüğünüz gibi yönetim sayfamız ön tanımlı olarak İngilizce gelmektedir. Eğer Türkçe'ye çevirmek istersek settings.py dosyasında LANGUAGE_CODE değişkenini aşağıdaki gibi değiştirmemiz yeterli olacaktır:

LANGUAGE_CODE = 'tr-TR'








Yönetim paneli size kullanıcı ve grup yönetimi (Auth), bu projede barındırılan web siteleri alan ve isimlerin yönetimi (Sites) ve veritabanı yönetimi (daha önce uygulamamızdaki admin.py dosyasına eklediğimiz veritabanları) bölümlerini etkin kullanmada yardımcı olur. Şimdi yönetim paneli yardımıyla veritabanı işlemlerinizi rahatlıkla yapabilirsiniz.






























Yönetim paneli ile ilgili daha çok veriye burdan ulaşabilirsiniz.


Referanslar :
  1. https://docs.djangoproject.com/en/dev/
  2. BAŞER, Mustafa (2013). Django