İyi bir Django proje yapısı için ipuçları

2021-07-28 3 dk

En iyi yapı hangisi, net bir şey söylemek mümkün değil ama kontrolü kolay ve anlaşılır bir Django proje yapısı için birkaç öneri verebilirim. Bu yazıda varsayılan Django proje yapısının ötesine basitçe geçmeyi deneyeceğiz. Yeni başlayanlar için faydalı olacaktır.

Not: Tüm örneklerde Django projesinin elmadev isminde bir blog sitesi olduğu varsayılacaktır.

1. Ayrı bir "uygulamalar" klasörü

Bir Django projesinin ana dizininde birden fazla klasör görürsünüz ve bunlar ana proje klasörünün haricinde genelde uygulamaları barındıran klasörlerdir. Her uygulamaya bir klasör. Fakat bunların ana dizinde olmasının gereksiz karmaşık bir görüntü yarattığını düşünüyorum.

Tüm uygulamalarımızı apps isminde bir klasör oluşturup içinde tutabiliriz:

├── apps              <---- buraya dikkat
│   ├── __init__.py
│   ├── authors
│   └── posts
├── elmadev
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

settings.py dosyasında apps klasörünü path'e şöyle ekleyebilirsiniz:

sys.path.append(str(BASE_DIR / 'apps'))

Bu şekilde uygulamalardan herhangi bir modül içe aktarmak için her zamanki kullanımla devam edebilirsiniz:

from authors.views import AuthorDetailView
from posts.views import PostDetailView

2. Projenin ana klasörünü farklı isimlendirmek

Django projesinin içindeki ana klasörün projeyle aynı isimde olmasındansa, daha jenerik bir isim kullanmayı doğru buluyorum.

$ django-admin startproject elmadev

Yukarıdaki komut, şöyle bir proje yapısı oluşturacak:

elmadev
├── elmadev  # <--- buraya dikkat
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Bizim istediğimiz yapı ise şöyle:

elmadev
├── main  # <--- buraya dikkat
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

Bu değişikliği yeni bir projede yapmak istiyorsanız, sadece aşağıdaki komutla halledebilirsiniz:

$ django-admin startproject main

Ancak önceden oluşturulmuş bir projede yapmak istiyorsanız, yapılacaklar şunlar:

  1. elmadev klasörünün ismini main olarak değiştirin.
  2. Proje dosyalarında hâlâ elmadev olarak geçen yolları main ile değiştirin:
    • manage.py:9, wsgi.py:14, asgi.py:14: elmadev.settings > main.settings
    • main/settings.py:52: ROOT_URLCONF = 'elmadev.urls' > ROOT_URLCONF = 'main.urls'
    • main/settings.py:70: WSGI_APPLICATION = 'elmadev.wsgi.application' > WSGI_APPLICATION = 'main.wsgi.application'

3. Farklı geliştirme ortamları için farklı settings.py dosyaları

Geliştirme, test ve yayın aşamaları için farklı settings.py dosyaları kullanabilirsiniz. Bunun için çok sayıda yöntem var. Burada kolaylıkla anlaşılabilecek bir örnek üzerinden gidelim.

Ana proje klasörümüzün adı bir önceki örnekte değiştirdiğimiz için artık main.

  1. main klasörü içerisindeki settings.py dosyasını base.py olarak isimlendirin.

  2. main klasöründe settings isminde bir klasör oluşturun ve base.py dosyasını içine taşıyın. __init__.py dosyasını oluşturmayı da unutmayın.

  3. development.py isminde yeni bir dosya oluşturup içine şu kodları ekleyin:

    from base import *
    
    DEBUG = True
    # ...
    
  4. Geliştirme aşamasında değiştirmek istediğiniz tüm ayarları burada yeniden tanımlayabilirsiniz, tıpkı DEBUG = True satırı gibi.

  5. asgi.py ve wsgi.py dosyaları içindeki main.settings yolunu main.settings.base olarak değiştirin.

  6. Örneğin geliştirme için kullandığınız virtual environment içerisinde DJANGO_SETTINGS_MODULE = 'main.settings.development değişken tanımlaması yaparsanız, Django bu env içerisindeyken artık development modülünü kullanır.

4. Farklı requirements.txt dosyaları:

Bu dosya, Python bağımlılıkları sakladığımız bir dosya ve bu dosyadan birden fazla oluşturup birbirlerine bağlayabilirsiniz. Örneğin, requirements.txt ve requirements-dev.txt isminde iki dosyamız olsun ve ikincisinin içine şu satırı ekleyerek ilk dosyanın da içeriklerini dahil etmiş olalım:

-r requirements.txt

Bu yöntemle, pip install -r requirements-dev.txt komutunu kullanarak bağımlılıkları yüklediğinizde, requirements.txt dosyasının içerisindeki bağımlılıklar da otomatik olarak yüklenecektir.


Daha birçok öneri eklenebilir ama yazı çok uzadı. Daha sonra eklemeler yapabilirim.

Tarih: 2021-07-28
Kategoriler: pythongeliştirme
Etiketler: django