01 - Başlangıç

March 30, 2018 4 minute read

Web Framework’leri, bir web projesinde duyulabilecek temel ihtiyaçları belli bir amaç doğrultusunda, belli yöntemlerle karşılamaya çalışırlar. Bugüne kadar geliştirilmiş binlerce framework var ve tercihi nasıl yapacağınız konusu tamamen size bağlı. Kararınız Django ise veya Django’ya meraklıysanız, bu yazı dizisini sizler için hazırladım. Elimden geldiğince hızlı bir başlangıç yapacağım, detaylara boğmak yok, motivasyonunuzu da yüksek tutmaya çalışacağım.

Özet

  • Django geliştirme ortamımızı kuracağız.
  • Geliştirme sunucusunu nasıl kullanacağımızı öğreneceğiz.
  • Dizin ve dosya yapımızı inceleyeceğiz, MVC ve MTV konularına kısaca değineceğiz.
  • Anasayfamızı çok basit bir tasarımla birlikte sunacağız.
  • Bu yazıyla ilgili kodlara buradan erişebilirsiniz.

En Temel Gereksinimler

En temel gereksinimimiz Django’nun geliştirildiği dil olan Python. Yani öncelikle bizim Python31 yorumlayıcısına ihtiyacımız var. Sitesine girip kurduktan sonra beraberinde pip paket yükleme aracınızı da kurmuş olacaksınız. Bu araçla Django’yu kuracağız. Kullandığınız herhangi bir terminal uygulamasını açın ve şu komutu çalıştırın:

$ pip install Django==2.0.3
Collecting Django==2.0.3
  Downloading Django-2.0.3-py3-none-any.whl (7.1MB)
    100% |████████████████████████████████| 7.1MB 127kB/s
Collecting pytz (from Django==2.0.3)
  Downloading pytz-2018.3-py2.py3-none-any.whl (509kB)
    100% |████████████████████████████████| 512kB 776kB/s
Installing collected packages: pytz, Django
Successfully installed Django-2.0.3 pytz-2018.3

Django kurulduktan sonra, artık Django projelerini yönetebilmek için bir yeni bir komutumuz var, django-admin. Hemen bir websitesi projesini oluşturalım ve geliştirme sunucusunu çalıştıralım:

$ django-admin.exe startproject hello_django
$ cd hello_django
$ python manage.py runserver 0:8000  # Bunu hatırlayın, çok sık kullanacağız.
Performing system checks...

System check identified no issues (0 silenced).

You have 14 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
March 30, 2018 - 22:14:18
Django version 2.0.3, using settings 'hello_django.settings'
Starting development server at http://0:8000/
Quit the server with CTRL-BREAK.

Bu noktaya kadar geldiniz ve web tarayıcınızdan http://localhost:8000 adresine girdiğinizde aşağıdaki gibi bir görüntü alıyorsanız, temel gereksinimlerimiz tamam demektir.

Django installation

Kodlamaya Geçmeden, Bir Gözden Geçirelim

Projemizin dizin / dosya yapısını bir gözden geçirelim. Ne nerede, önce onu bilelim:

hello_django/
  __pycache__
  settings.py
  urls.py
  wsgi.py
  __init__.py
db.sqlite3
manage.py

Eksikler çok; ama başlamak için yeterince basit. En önemlilerinden başlayalım:

  • db.sqlite3, adından belli. Veritabanı dosyamız, varsayılan veritabanı hizmetini SQLite‘ten alıyoruz.
  • manage.py, django-admin komutumuzla benzer bir işlevi var; ancak içinde barındırıldığı projeye göre özelleştirilmiş, yapılandırılmış.
  • settings.py, proje ayarlarımızı içeren bir Python dosyası.
  • urls.py, tüm url tanımlamalarımızı içeriyor.
  • wsgi.py, WSGI yapılandırmamızı içeriyor.

WSGI’ye daha sonra bakacağız, onu bir kenara bırakalım ve runserver ile ne olduğunu anlayalım:

  1. Önce proje ortamındaki değişkenlerimiz manage.py ile tanımlanıyor.
  2. Ayarlarımız settings.py dosyasından alınıyor, uygulanıyor. Veritabanımız da bu noktada ayarlanmış oluyor.
  3. Web adreslerimiz urls.py üzerinden tanımlanıyor. Böylece burada tanımlanan adreslere tarayıcımızdan ulaşabiliyoruz.

Buraya kadar projenin nasıl çalıştığını anladıysak, artık kod yazmaya ve MTV (Model - Template - View) kullanarak ilk sayfamızı oluşturmaya hazırız.

MTV nedir? Birlikte Deneyelim

Bir web sitesi ziyaretçisinin isteklerinin değerlendirilmesi ve cevaplandırılması için yazılımda çeşitli tasarımlar bulunuyor ve bunlardan biri MVC2. Model - View - Controller sayesinde, ziyaretçinin istekleri alınıyor, View katmanında değerlendiriliyor; veri gerektiğinde Model katmanından elde ediliyor ve Controller üzerinden bu iki katman arasında iletişim sağlanıyor.

Fakat Django’da biz bu yapıyı farklı şekilde kullanıyoruz ve MTV (Model - Template - View) olarak isimlendiriyoruz. Bir Controller yerine merkeze View katmanını koyuyoruz, veriyi Model katmanından alıyoruz, Template katmanında da kullanıcıya bir sonuç gösteriyoruz. URL adresi tanımlarken de hep View katmanını kullanıyoruz. Bunu bizzat deneyip görelim. Yapacağımız şey, anasayfada farklı bir mesaj göstermek. Önce hello_django/hello_django/urls.py dosyasını açın ve ilk sayfamızı bağlayalım:

...
from django.contrib import admin
from django.urls import path
from hello_django.views import HomeView  # Bunu ekledik.

urlpatterns = [
    path('', view=HomeView.as_view(), name='home'),  # Bunu ekledik.
    path('admin/', admin.site.urls),
]

Burada anasayfaya ziyaret edildiğinde hangi View class’ının karşılayacağını belirtmiş olduk; fakat View henüz hazır değil. hello_django/hello_django/views.py dosyası oluşturup yeni bir tane yazalım:

from django.views.generic import TemplateView


class HomeView(TemplateView):
    template_name = 'home.html'

Geliştirme sunucumuzu daha önce gösterdiğimiz şekilde çalıştırın ve sonucu beraber anlayalım:

Template does not exist.

View class’ımızda home.html dosyasını kullanacağımızı belirttik, Django bizim için birkaç yere bakmış ama Template’i bulamamış. Biz bir dizin oluşturalım ve Template dosyamızı hello_django/templates/home.html olarak tutalım:

<!doctype html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Hello, Django!</title>
        <link rel="stylesheet" href="/static/main.css"> <!-- Buna dikkat! -->
    </head>
    <body>
        <h1>Hello, Django!</h1>
    </body>
</html>

Son bir şey kaldı. Django’ya Template dizinimizin nerede olduğunu haber vermemiz gerekiyor. settings.py dosyasını açın ve aşağıdaki değişikliği yapın:

...
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],  # Bunu değiştirdik.
        'APP_DIRS': True,
        'OPTIONS': {
            ...
        },
    },
]
...

Say hello!

Artık beklediğimiz sonucu görebiliyoruz. Son olarak sayfada bir stil düzenlemesi yaparak ilk yazımızı tamamlayalım. HTML dosyamızı oluştururken /static/main.css adında bir stil dosyamız varmış gibi tanımlamıştık. Bu dosyayı oluşturalım ve sonra static dizinimizi Template dizini için olduğu gibi settings.py dosyamızda tanımlayalım.

static/main.css dosyamız:

body {
  background-color: #222;
  color: #fff;
  font-size: 48px;
  font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}

settings.py dosyamızda yapılan değişiklik:

...
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.0/howto/static-files/

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

Black and white

MTV’nin Template ve View katmanlarına burada kısaca değinmiş olduk. Bir sonraki yazımda Model katmanı hakkında bilgi vereceğim ve bununla ilgili beraber bir alıştırma yapacağız. Hoşça kalın!


  1. Python3 buradan indirebilirsiniz. [return]
  2. MVC hakkında daha fazla bilgi için buraya bakın. [return]