Django Öğrenmek-3: Django Kurulumu, izole geliştirme ortamı “virtualenv”, Örnek Proje “Hello World”

Django Unchained (2012)

Bu seride, Django öğrenirken kendi yaşadığım zorlukları ve internette okuduklarımı referans alarak Django öğrenmeye yeni başlayanlara destek olmaya çalışacağım.

Bu yazıda Django’yu kurup ilk Django projemizi oluşturacağız.

Seriye ait tüm yazılara ulaşmak için:
Django Öğrenmek-1: Django öğrenmek neden zor?
Django Öğrenmek-2: Temel yapı taşları, URL, Template, Django App
Django Öğrenmek-3: Django Kurulumu, izole geliştirme ortamı “virtualenv”, Örnek Proje “Hello World”
Django Öğrenmek-4: Farklı Çalışma Ortamları İçin Farklı “settings.py” Kullanmak

Django’yu Kurmak

1- Bilgisayarınızda “pip” kurulu değilse önce pip’i kurun. Eğer python 2 kullanıyorsanız ve sürüm olarak 2.7.9 ve daha yeni bir sürüm yüklüyse ya da python 3 kullanıyorsanız ve sürüm olarak 3.4 ve daha yeni bir sürüm yüklüyse pip zaten yüklü demektir.

2- Projemizi geliştirme yaptığımız bilgisayardan izole edip daha kolay taşınabilir bir hale getirmek amacıyla sanal geliştirme ortamı yaratmak için “virtualenv” kullanacağız. Virtualenv ile ilgili sorun yaşamamak için lütfen pip’in güncel olduğundan emin olun.

3- Virtualenv’inizi yarattıktan ve aktif ettikten sonra aşağıdaki komut ile Django’yu kurun:
# pip install Django

Pip’in kurulu ve güncel olduğundan emin olduktan sonra ilk projemizi oluşturmaya başlayalım:

1- İstediğiniz herhangi bir konumda proje için Django-SimpleBlog isimli bir klasör oluşturalım:

2- Virtualenv’imizi oluşturalım: python3 -m venv <klasör adı>
# python3 -m venv ./venv

Virtualenv’imizi aktif etmenin ne demek olduğunu gözlemlemek için önce, çalıştığımız bilgisayarda daha önce yüklemiş olduğunuz kütüphane, framework ya da benzer üçüncü parti bileşenleri “pip freeze” komutu ile listeleyelim:

3- Proje klasörünün içindeyken virtualenv’imizi aktif edelim:
# source ./venv/bin/activate

Bu aşamadan itibaren projemizi, çalıştığımız bilgisayardan izole hale getirdik. Bunun anlamı daha önce yüklemiş olduğunuz hiçbir kütüphane, framework ya da benzer üçüncü parti bileşen projemiz için erişilebilir durumda olmayacak. İhtiyacımız olmayan her şeyi projemiz kapsamından çıkarmış olduk ve ihtiyaçlarımızı, venv aktif durumdayken yükleyerek proje özelinde kullanmak üzere hazır hale getireceğiz.

4- Django’yu yükleyelim ve “pip freeze” ile değişikliği gözlemleyelim:
# pip install django

5- Django Proje’mizi oluşturalım: django-admin startproject <project name>
# django-admin startproject SimpleBlog

Klasör yapımıza göz atalım:

  • Django-SimpleBlog: En başta oluşturduğumuz ana klasör
  • Django-SimpleBlog/SimpleBlog: Altındaki her şey ile birlikte, “django-admin startproject SimpleBlog” komutu ile oluşmuş ana Django Proje klasörü.
  • Django-SimpleBlog/SimpleBlog/SimpleBlog: İleride bolca kullanacağımız, temel proje ayarlarının ve url bağlantılarının yapıldığı dosyaları içeren klasör.

Devam etmeden önce, kafa karışıklığını önlemek için Django-SimpleBlog/SimpleBlog klasörünün adını değiştirerek Django-SimpleBlog/SimpleBlog-root yapıyorum. Bu klasörün altında kalan dosya ve klasörler için herhangi bir isim ve konum değişikliği yapmamanızı tavsiye ederim. Bu işlemler, Django’nun doğru çalışmasını engelleyebilir.

6- Terminal üzerinden Django Proje klasörümüz olan SimpleBlog-root’a gidelim ve ilk Django App’imizi oluşturalım: python manage.py startapp <app name>. Örnek olarak kullanıcı Gönderi’lerini yöneteceğim bir app yaratacağım.
#
python manage.py startapp Posts

Bunun ardından klasör yapımıza tekrar göz attığımızda Posts adlı bir klasör ve altında birçok dosya oluştuğunu görebilirsiniz:

7- Son olarak Posts Django App’imizi Django’ya tanıtmak için Django-SimpleBlog/SimpleBlog-root/SimpleBlog/settings.py içinde INSTALLED_APPS’e kendi yarattığımız Posts app’ini resimdeki gibi ekliyoruz:

Bununla birlikte Django’yu sanal geliştirme ortamımızda kurmuş ve ilk Django App’imizi oluşturmuş olduk 👏 👏

Şu ana kadar yaptıklarımızı özetleyen genellenmiş liste:

Hello World

Bu bileşenleri statik ve dinamik sonuçlar döndürmek için 2 farklı senaryo ile inceleyelim.

İlk senaryomuz:

Bu senaryoyu örneklemek için:

1- SimpleBlog-root altında “templates” adlı bir klasör oluşturalım

2- templates klasörünün alına hellow_world.html dosyasını oluşturup içini aşağıdaki gibi dolduralım

3- “templates” klasörümüzü Django’ya tanıtmak için SimpleBlog-root/SimpleBlog/settings.py dosyasını aşağıdaki gibi düzenleyelim:

4- Projemizde url yönetiminin ilk noktası olan SimpleBlog-root/SimpleBlog/urls.py dosyasını aşağıdaki gibi düzenleyelim

Bu düzenlemeyle birlikte <host>/hello/ konumu bize hellow_world.html dosyasının içeriğini dönecek.

5- Kodumuzu test etmek için terminalde SimpleBlog-root konumuna gidelim ve Django’nun kendi içinde hazır olarak gelen server’ı çalıştıralım:
# python manage.py runserver

6- Sonuç:

İkinci senaryomuz:

1- SimpleBlog/urls.py dosyasını aşağıdaki gibi düzenleyelim:

Bu düzenleme ile, <host>/posts/ konumu bize Posts/urls.py dosyasını işaret edecek.

2- Posts Django App klasörünün altına urls.py dosyası oluşturalım ve içini alağıdaki gibi düzenleyelim:

Bu düzenlemeyle birlikte <host>/posts/hello/ konumu bize views.py dosyasının hello methodu’nun döndüğü HttpResponse’u gösterecek.

3- views.py dosyasını aşağıdaki gibi düzenleyelim:

Bu düzenleme ile, sorgunun yapıldığı tarihi kullanıcıya döndüreceğiz.

4- Sonuç:

Örnek projenin tamamına buradan ulaşıp indirebilirsiniz. Yukarıda örneklediğimiz senaryoları 4. ve 5. commit ile görebilirsiniz:

Serinin sonraki bölümünde, veritabanı üzerinde veri saklayıp kullanmayı öğreneceğiz. Bununla birlikte paylaşım yapabildiğimiz basit bir blog projesi olma yolunda “Simple Blog” ile kodlamaya devam edeceğiz.

Serinin, yorumlarınızdan yardım alarak gelişeceğini belirtmek istiyorum. Bu bağlamda yukarıda bahsedilen sorunları yaşadığınızı düşünüyorsanız ya da bu sorunlar dışında yaygın olarak karşılaşılan farklı sorunlar olduğunu görüyorsanız lütfen yorum bırakarak bana ve diğer kullanıcılara tavsiye ve görüşlerinizi sunmaktan çekinmeyin.

Takip etmeyi, beğenerek ve paylaşarak destek olmayı unutmayın! :)

Software Engineer, Growth & Gamification Enthusiast

Software Engineer, Growth & Gamification Enthusiast