Django Notları

Bugün eski projelerimden birisine bakmam gerekti. Daha önce friendfeed de bir link paylaşmıştım. Django hakkında 10 numara gibi bir şeydi ama paylaşmama rağmen kendimin bu numaraları kullanmadığımın farkına vardım. Kodları Linux’ta yazdığım için dizinleri tek tek linuxa göre yazmıştım. Windows’a gelince tabiki hiç biri çalışmadı. Bende aynı hatayı yapmamak için bu numaralardan birisini çektim. Böylece bundan böyle kodları hangi platforma taşırsam taşıyım çalışacaklar. Unutkanlığımdan kurtulmak için blogda paylaşıyorum böylelikle bir daha aynı hatayı yaparsam insanlar beni kınayabilecek 😛

neyse gelelim koda:

import os ile elbette os modülünü ekliyoruz settings.py dosyasına ondan sonra
SITE_ROOT = os.path.realpath(os.path.dirname(__file__)) satırını ekliyoruz. Böylelikle dosyamızın bulunduğu dizinin adresini alıyoruz.
Sonra artık ne için dizin gerekiyorsa bunun üzerine çalışıyoruz mesala bende templates dizinine girmem gerekiyordu şöyle girdim.
TEMPLATE_DIRS = (os.path.join(SITE_ROOT, ‘templates’),) virgüle dikkat edin.

Diğer bir husus DEBUG’ı sunucuya taşıdımızda False yapmaktı. Bunun için şöyle bir şey buldum:


import socket

if socket.gethostname() == 'xxx111.com':
    DEBUG = False
else:
    DEBUG = True

Burada da host name’i alıyoruz xxx111.com’sa cevap demek ki sunucuya yollamışız diyoruz ve False ediyoruz. Bu özelliği deneyemedim daha yanlışsa düzeltin beni.

Bir başka numara ki bence benim yaptığım en büyük hatalardan birisi buydu. Statik sayfaları apache’ye yüklettirmekti. Onlar için ayrı bir model bile yazmıştım oysa ne gerek var böyle bir şeye? Statik sayfa için admin paneli gerekmiyor herhangi bir editör ile html olarka oluşturup yayınlasak yeterli. Bunun için nginx kullanıp htmlleri onun üzerinden yayınlamak gerekiyormuş. Bunu sunuya geçtiğimde kullanacağım.

http://docs.djangoproject.com/en/dev/topics/cache/ sitesinde cache olayı anlatılmış uzun uzun. Ben memcached’ı gözüme kestirdim her ne kadar şuan ihtiyacım olmasada ilerde olabilir diye hazırda koda ekleme yapabilirim. Tabi böyle bazı şeyleri denemek ve performans farkını görmek için dolu bir içeriği sunucuda test etmem gerekiyor. DB de 100 veri varken göstereceği farkla 10000 veri varken göstereceği farkı anlamak gerek. Deneyen varsa yorum yapsın bizde bilelim. Ona göre diğer cache yöntemlerinden birisinide kullanabilirim.

Siteyi hızlandırmak için diğer bir yöntemde css ve js’leri sıkıştırmakmış. django-compress isimli bir modül aracılığıyla bu işlem yapılıyor. İki tane js’i sıkıştırsan ne olur sıkıştırmasan ne olur diyebilirsiniz ama django’yu hızlandırmak için yaptığım aramalarda bir kaç kişi bu özelliği anlatmış. Şimdi yine kullanıcı sayısıyla orantılı bir konu. Tek bir js bile olsa 100k kullanıcınız varsa bu yöntemler etkili olabilir. Ama ben sadece blog yazacam derseniz gerekmeyebiliyor. Bana göre basit bir blog dahi yazsakta (ki öyle bir site için 4-5 model bile yetiyor) işimizi düzgün yapıp bu teknikleri uygulamalıyız. İleride belki o uygulamayı başka bir tanesine ekleriz bilemezsiniz gelecekte ne olacağını.

Hız için diğer tavsiyeler apache ile alakalı onları başka bir yazıda paylaşırım. Birde auth modülüyle ilgili güzel örnekler var. Django’nun en sevdiğim özelliği kullanıcı girişi için ekstra bir çalışma yapmamanız. İsterseniz kendi login templateni bile kullanabiliyorsunuz. Başka platformlarda belki uzun uzun kodlar yazmanız gerekir login olabilmesi için kullanıcınızın, djangoda ise template 1-2 link ekliyorsunuz tamam iş.

Neyse, herkese iyi çalışmalar.