Skip to main content

Python ve Django ile Web Sitesi Oluşturmak

Python ile bir web sitesi kurmak için genelde Django, Flask gibi çatılardan biri kullanılır. Çatı kullanmasanız da olur ama bu durumda çatıların size sağladığı birçok kolaylıktan faydalanamazsınız ve birçok işlevi kendinizin kodlaması gerekir.

Sanal Ortamın Kurulumu

Django'yu bilgisayarınıza kurmadan önce sanal ortam oluşturmalıyız. Bunun için öncelikle terminali açalım. Ardından aşağıdaki komut ile web sitemiz için bir sanal ortam oluşturalım.

Linux yüklü bilgisayarda:

python -m pip install virtualenv

Windows yüklü bilgisayarda:
Komut istemcisi "cmd" yönetici yetkisiyle açıldıktan sonra:

pin install virtualenv

Sanal ortam kurulduktan sonra web sitemizin dosyalarını koyacağımız dizini oluşturmalıyız. Örneğin aşağıda linux yüklü bilgisayarda "/var/www/html/" dizininde (Windows yüklü bilgisayarda D:\ sürücüsü) içerisinde "djangositesi" adlı bir dizin oluşturuyorum.

Linux yüklü bilgisayarda:

cd /var/www/html/
mkdir djangositesi

Windows yüklü bilgisayarda:

D:
mkdir djangositesi

Şimdi bu dizinin içerisinde sanal bir ortam oluşturalım. Bunun için önce dizinin içerisine girelim ve "env" adlı bir ortam oluşturalım. Bu ortama siz başka bir isim de verebilirsiniz.

Linux ve Windows yüklü bilgisayarda:

cd djangositesi
virtualenv env

Bu komut "djangositesi" dizini içerisinde "env" adlı bir dizin oluşturacaktır. Bu ortamı etkin hale getirmek için aşağıdaki komutu çalıştıralım.

Linux yüklü bilgisayarda:

source env/bin/activate

Windows yüklü bilgisayarda:

cd env
cd scripts
activate
cd ..
cd ..

(Not: İleride ortamı kapatmak için deactivate komutunu çalıştırmanız yeterlidir.)

Bu komut çalıştırılınca oluşturduğumuz "env" ortamının adı parantez içinde yazılı olarak "(env)" şeklinde görülüyorsa sanal ortamımız başarıyla oluşturulmuş ve etkinleştirilmiştir.

Django'nun Kurulumu

Django'yu kurmak için öncelikle Python sürümünün 3.6 ve üzeri olduğundan emin olalım. Python sürümünü görmek için aşağıdaki kod çalıştırılır.

python --version

Şimdi ise Django çatısını bilgisayarımıza aşağıdaki komut sayesinde kuralım.

python -m pip install django

Django çatısının bilgisayarımıza kurulduğundan emin olmak ve versiyonunu görmek için aşağıdaki komut kullanılır.

python -m django version

Yaşasın. Artık bilgisayarımıza Django'yu da kurmuş olduk.

Bir Web Sitesinin Oluşturulması

Bir uygulamayı (örneğin bir web sayfasını) oluşturmak için oluşturduğumuz "(env)" ortamı aktif iken ve yine oluşturduğumuz "djangositesi" dizini içerisindeyken aşağıdaki komut çalıştırılır. Bu komut ile örneğin "ilksitem" adlı bir uygulama oluşturuyorum.

django-admin startproject ilksitem

Bu komut sayesinde "ilksitem" adında bir dizin oluşacaktır. Bu dizinin içinde ise "manage.py" adlı bir dosya ve yine "ilksitem" adlı (içerisinde çeşitli python dosyalarının olduğu) bir dizin bulunacaktır. Bu sayede "ilksitem" adlı uygulamamızın iskeletini oluşturmuş olduk.

  • "settings.py" dosyası çeşitli ayarları yaptığımız dosyadır.
  • "urls.py" dosyası websitemizdeki çeşitli sayfaların url adreslerini barındırır.
  • "ilksitem" uygulamamızın adıdır.
  • Web sitesi içinde oluşturacağımız her bir uygulamanın (ör. web sayfasının) ayrı bir ismi olmalı ve örneğimizdeki "ilksitem" dizininin içerisinde bulunmalıdır.

Şimdi henüz içi boş olan web sitemizi görelim. Bunun için aşağıdaki komutu çalıştıralım.

python manage.py runserver

Bu komut çalıştırıldıktan sonra terminalde görülen "Starting development server at http://127.0.0.1:8000/" ifadesiyle sunucunun çalıştığı ve web sitemize http://127.0.0.1:8000/ adresinden ulaşabileceğimiz belirtilmektedir. Herhangi bir tarayıcının adres çubuğuna bu adresi kopyalayarak web sitemizi görüntüleyebiliriz.

Öntanımlı "8000" numaralı port yerine başka bir portun kullanılmasını istiyorsak (Ör. 8080 numaralı port) aşağıdaki şekilde bunu belirtebiliriz.

python manage.py runserver 127.0.0.1:8080

Sunucuyu kapatmak için terminal aktif iken CTRL+C tuşlarına basmak yeterlidir.

Ayarlar Dosyası: settings.py

Şimdi "ilkstem" dizini içindeki "settings.py" dosyasının içeriğini anlamaya çalışalım ve ihtiyacımız olan bazı ayarları yapalım.

  • BASE_DIR: Projenin/web sitesinin bulunduğu dizini gösterir.
  • SECRET_KEY: Sunucu ile istemci arasındaki iletişimde kullanılacak şifre anahtarıdır.
  • DEBUG: "True" değeri aldığında sitede oluşacak hatalar gösterilirken "False" değeri aldığında bu hatalar gösterilmez. Site yayına geçtiği zaman "False" haline getirmek gerekir.
  • ALLOWED_HOSTS: Yayın yapılacak adresleri belirtmemize yarar. Şimdilik ALLOWED_HOSTS=["127.0.0.1"] olarak değiştirebiliriz.
  • ROOT_URLCONF: Öntanımlı olarak yazan "ilksitem.urls" ifadesiyle web sitemizdeki URL adreslerinin "ilksitem" dizini içindeki "urls.py" dosyasında kaydedildiğini belirtir.
  • DATABASES: Kullanılan veritabanları tanımlanır. Bu kısımdaki URL'den diğer veritabanlarına ait kalıplara da ulaşabilirsiniz.
  • AUTH_PASSWORD_VALIDATORS: Web sitemizdeki şifrelerin büyük harf ve küçük harf içermesi, en az 8 karakterli olması, bir sayı içermesi gibi özelliklerin kontrol edilmesini sağlar.
  • LANGUAGE_CODE: Web sitesinin dilini belirtir. Öntanımlı olarak "en-us" değeri almaktadır. Türkçe içeriğe sahip bir web sitesi yapacaksanız bunun değerini "tr" olarak değiştirmelisiniz.
  • TIME_ZONE: Bulunulan zaman dilimini belirtir ve öntanımlı değeri "UTC" şeklindedir. Türkiye'deki ziyaretçiler hedeflenmekte ise bunun değerini "Europe/Istanbul" yapmanızı tavsiye ederim.

Yönetim Dosyası: manage.py

"manage.py" dosyası ile çalışabilmek için öncelikle bir süper kullanıcı oluşturmamız gerekir. Sunucuyu açık ise terminal aktif iken CTRL+C tuşlarına basarak sunucuyu kapatalım. Ardından terminalde djangositesi/ilksitem dizinine gidelim ve aşağıdaki iki kodu çalıştıralım.

python manage.py migrate
python manage.py createsuperuser

Bizden istenen süper kullanıcı adı olarak, örneğin, "admin" yazalım, e-posta adresimizi yazalım ve belirlediğimiz şifre politikasına uygun bir şifre belirleyelim. Ardında aşağıdaki şekilde sunucuyu çalıştıralım.

python manage.py runserver

Yukarıdaki kodun çıktısında yer alan "http://127.0.0.1:8000/" adresine süper kullanıcı adımızı da ekleyelim. Örneğimizde oluşan "http://127.0.0.1:8000/admin" adresini kullandığımız tarayıcıya yapıştırarak "admin" sayfasını açabiliriz.

Sayfa Yolları Dosyası: urls.py

URL, ziyaret edilen bir web sayfasının adresidir. Örneğin https://www.egitimportali.com/konu-anlatimlari/ ve http://127.0.0.1:8000/admin adresleri birer URL'dir. urls.py sayesinde web sitemizden istenilen sayfaların hangi görüntüleme (view) safyası ile ilişkilendirileceği belirtilir. Örneğin "urls.py" içerisinde yer alan aşağıdaki

urlpatterns = [
    path('admin/', admin.site.urls),
]

Web Sitesi İçinde Bir Uygulamanın Oluşturulması

Sitemizin iskeletini oluşturduktan sonra artık bir örnek uygulama oluşturmak için aşağıdaki komutu kullanabiliriz. Tabii önce projenin/web sitesinin dizininin (örneğimizde /var/www/html/djangositesi/ veya D:\djangositesi\ dizini) içerisinine girmemiz lazım.

python manage.py startapp ilksayfam

Bu komut sayesinde "ilksitem" dizininin yanına "ilksayfam" adlı bir dizin oluşturacak ve bu dizinin içinde de çeşitli python dosyaları bulunacaktır.

Oluşturduğumuz bu "ilksayfam" sayfasının ziyaretçiler tarafından ulaşılabilmesi için daha önce oluşturduğumuz iskelete tanıtmamız gerekir. Bunun için "ilksitem" dizininin yanındaki "ilksayfam" dizininin (yani örneğimizde /var/www/html/djangositesi/ilksayfam/ veya D:\djangositesi\ilksayfam\ dizini) içerisindeki "views.py" dosyasını herhangi bir yazı düzenleyicisi (text editor) ile açalım. Dosya ilk açıldığında işçinde aşağıdaki satırlar yer almaktadır.

from django.shortcuts import render

# Create your views here.

Bu "views.py" dosyanın içini aşağıdaki hale getirelim ve dosyayı kaydedip kapatalım. Yazdığımız bu satırlar sayesinde sitemizin ziyaretçisi "ilksayfam" sayfasını görüntüleme isteğinde (request) bulunduğunda biz ziyaretçiye "Uğur ola!" şeklinde bir yanıt (response) dönmüş oluyoruz. Bu yanıtı istediğiniz şekilde ve html kodları vs. kullanarak daha da zengin hale getirebilirsiniz. "def" ile tanımladığımız "index" fonksiyonunun altındaki "return" satırının önüne aşağıdaki şekilde "tab" tuşu kullanarak girinti koymayı unutmayın.

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Uğur ola!")

Ardından yine "ilksayfam" klasöründe "urls.py" adında bir dosya oluşturalım ve içine aşağıdaki satırları yazalım.

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

Şimdi ise "ilksayfam" sayfasının yolu tanıtmak için "ilksitem" klasöründeki "urls.py" dosyasını açalım ve içine aşağıdaki şekilde eklemeler yapalım. Bu sayede ziyaretçilerden gelen görüntülemek isteklerinin (request) hangi python kodlarına yönlendirileceğini belirtmiş oluyoruz.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('ilksayfam/', include("ilksayfam.urls")),
]

Artık hazırladığımız sayfayı görüntüleyebiliriz. Aşağıdaki komutu kullanarak sunucuyu çalıştıralım.

python manage.py runserver

Ardından tarayıcımızı açalım ve http://127.0.0.1:8000/ilksayfam/ adresine gidelim. Ekranda "Uğur ola!" yazıyorsa ilk sayfanızı oluşturdunuz demektir. Tebrikler.

Web Sitesinin Ana Sayfasının Oluşturulması

Sitemizin ana sayfasını da yukarıda anlatılan "ilksayfam" sayfasına benzer şekilde oluşturulabilir. Bunun için hâlihazırda mevcut bulunan "ilksitem" dizininin içerisinde "views.py" dosyasını oluşturalımherhangi bir yazı düzenleyicisi (text editor) ile açalım. Dosya ilk açıldığında işçinde aşağıdaki satırlar yer almaktadır.

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Burası ana sayfa.")

Bu "views.py" dosyanın içini aşağıdaki hale getirelim ve dosyayı kaydedip kapatalım. Yazdığımız bu satırlar sayesinde sitemizin ziyaretçisi "ilksayfam" sayfasını görüntüleme isteğinde (request) bulunduğunda biz ziyaretçiye "Uğur ola!" şeklinde bir yanıt (response) dönmüş oluyoruz. Bu yanıtı istediğiniz şekilde ve html kodları vs. kullanarak daha da zengin hale getirebilirsiniz. "def" ile tanımladığımız "index" fonksiyonunun altındaki "return" satırının önüne aşağıdaki şekilde "tab" tuşu kullanarak girinti koymayı unutmayın.

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Uğur ola!")

Ardından yine "ilksayfam" klasöründe "urls.py" adında bir dosya oluşturalım ve içine aşağıdaki satırları yazalım.

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

Şimdi ise "ilksayfam" sayfasının yolu tanıtmak için "ilksitem" klasöründeki "urls.py" dosyasını açalım ve içine aşağıdaki şekilde eklemeler yapalım. Bu sayede ziyaretçilerden gelen görüntülemek isteklerinin (request) hangi python kodlarına yönlendirileceğini belirtmiş oluyoruz.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('ilksayfam/', include("ilksayfam.urls")),
]

Artık hazırladığımız sayfayı görüntüleyebiliriz. Aşağıdaki komutu kullanarak sunucuyu çalıştıralım.

python manage.py runserver

Ardından tarayıcımızı açalım ve http://127.0.0.1:8000/ilksayfam/ adresine gidelim. Ekranda "Uğur ola!" yazıyorsa ilk sayfanızı oluşturdunuz demektir. Tebrikler.

Faydalanılan Kaynaklar: