{Django Öğreniyorum}
Günümüz kusursuzcuları için ağ çatısı

İlk Django Uygulamanızı Yazma, Bölüm 2

Bu öğretici, öğretici 1‘in kaldığı yerden devam ediyor. Veritabanını kuracağız, ilk kalıbımızı (modelimizi) oluşturacağız ve Django’nun otomatik olarak oluşturduğu yönetici sitesine hızlı bir giriş yapacağız.

Veritabanı Kurulumu

Şimdi, benimsite/settings.py dosyasını açın. Bu dosya, Django ayarlarını temsil eden modül seviyesindeki değişkenlere sahip normal bir Python modülüdür.

Varsayılan olarak yapılandırılmış veritabanı SQLite’dır. Veritabanları konusunda yeniyseniz veya sadece Django’yu denemekle ilgileniyorsanız, bu en kolay seçimdir. SQLite Python’a dahildir. Bu nedenle veritabanınızı desteklemek için başka bir şey yüklemeniz gerekmez. Bununla birlikte, ilk gerçek projenizi başlatırken, veritabanı geçişindeki baş ağrılarından kaçınmak için PostgreSQL gibi daha ölçeklenebilir bir veritabanı kullanmak isteyebilirsiniz. Başka bir veritabanı kullanmak isterseniz, uygun veritabanı bağlamalarını yükleyin ve aşağıdaki anahtarları DATABASES‘ın varsayılan (‘default’) öğesinde veritabanı bağlantı ayarlarınıza uyacak şekilde değiştirin:

SQLite veritabanınız olarak kullanılıyorsa, USER (kullanıcı), PASSWORD (şifre) ve HOST (sunucu) gibi ek ayarlar eklenmelidir. Daha fazla bilgi için, DATABASES etkinleştirme belgelerine bakın.

SQLite dışındaki veritabanları için

SQLite dışında bir veritabanı kullanıyorsanız, bu noktaya kadar bir veritabanı oluşturduğunuzdan emin olun. Bunu “CREATE DATABASE database_name;” ile veritabanınızın etkileşimli isteminde yapın.

Ayrıca, benimsite/settings.py dosyasında sağlanan veritabanı kullanıcısının “veritabanı oluştur” ayrıcalıklarına sahip olduğundan emin olun. Bu, daha sonraki bir öğreticide ihtiyaç duyulacak bir sınama veritabanının doğal olarak oluşturulmasını sağlar.

SQLite kullanıyorsanız, önceden bir şey oluşturmanız gerekmez.Veritabanı dosyası gerektiğinde otomatik olarak oluşacaktır.

benimsite/settings.py dosyasını düzenlerken, TIME_ZONE değerini saat diliminize göre ayarlayın.

Ayrıca, dosyanın üst kısmındaki INSTALLED_APPS ayarına dikkat edin. Bu Django örneğinde etkinleştirilen tüm Django uygulamalarının adlarını tutar. Uygulamalar birden fazla projede kullanılabilir ve bunları başkaları tarafından projelerinde kullanılmak üzere paketleyebilir veya dağıtabilirsiniz.

Varsayılan olarak, INSTALLED_APPS, hepsi Django ile birlikte gelen aşağıdaki uygulamaları içerir:

Bu uygulamalar, genel durumlar için bir kolaylık olarak varsayılan olarak bulunur.

Bu uygulamalardan bazıları en az bir veritabanı tablosundan yararlanır, bu nedenle tabloları kullanabilmeniz için önce veritabanında oluşturmamız gerekiyor. Bunu yapmak için aşağıdaki komutu çalıştırın:


  $ python manage.py migrate
  

migrate (Göç) komutu, INSTALLED_APPS ayarına bakar ve benimsite/settings.py dosyanızdaki veritabanı ayarlarına ve uygulama ile birlikte gelen veritabanı göçlerine göre gerekli tüm veritabanı tablolarını oluşturur (bunları daha sonra ele alacağız). Uygulandığı her bir göç işlemi için bir ileti görürsünüz. Eğer ilgileniyorsanız, veritabanınız için komut satırı istemcisini çalıştırın ve

Django’nun oluşturduğu tabloları görüntülemek için kullanın.

Minimalistler için

Yukarıda da söylediğimiz gibi, varsayılan uygulamalar genel duruma dahil edilir, ancak herkesin ihtiyacı yoktur.Herhangi birine veya tümüne ihtiyacınız yoksa, INSTALLED_APPSçalıştırmadan önce INSTALLED_APPS uygun satırları yorum olarak yazabilir veya silebilirsiniz. migrate (Göç) komutu yalnızca INSTALLED_APPS uygulamasındaki migrate (Göç) işlemlerini INSTALLED_APPS alanındaki uygulamalar için göçleri çalıştıracaktır.


Kalıp (Model) Oluşturma

Şimdi modellerinizi(temelde veritabanı düzeninizi),ek meta verilerle tanımlayacağız.

Felsefe

Bir kalıp, verilerinizle ilgili gerçeğin tek ve kesin kaynağıdır. Sakladığınız verilerin önemli alanlarını ve davranışlarını içerir. Django, KURU Prensibi‘ni izler. Amaç, veri modelinizi tek bir yerde tanımlamak ve bu modelden otomatik olarak türetmektir.

Bu, göçleri de içerir.Örneğin Ruby On Rails’in aksine, göçler tamamen modeller dosyanızdan türetilir ve aslında yalnızca mevcut modellerinize uyacak şekilde veritabanı şemasını güncellemek için Django’nun kullanabileceği bir geçmişi vardır.

Basit anket uygulamamızda, iki kalıp oluşturacağız: Soru ve Seçim . Bir soru, bir soru ve yayın tarihine sahiptir. Seçim iki alana sahiptir: seçim metni ve toplam oy. Her Seçim bir Soru ile ilişkilendirilir.

anketler/models.py


  from django.db import models


  class Soru(models.Model):
      soru_metni = models.CharField(max_length=200)
      yayim_tarihi = models.DateTimeField('yayınlanma tarihi')


  class Secim(models.Model):
      soru = models.ForeignKey(Soru, on_delete=models.CASCADE)
      secim_metni = models.CharField(max_length=200)
      oylar = models.IntegerField(default=0)
  

Kod basittir. Her model, django.db.models.Model alt sınıflarının sınıfıyla temsil edilir. Her modelin sınıf değişkenleri vardır, bunların her biri modelin bir veritabanı alanını temsil eder.

Her alan bir Field sınıfı örneği ile temsil edilir.Örneğin, karakter alanları için CharField CharField ve tarih CharField için DateTimeField . Bu, Django’ya her alanın ne tür verilere sahip olduğunu söyler.

Her bir Field Field örneğinin adı (örneğin; soru_metni veya yayim_tarihi) makinece okunabilir biçimde olan alanın adıdır. Bu değeri Python kodunuzda kullanacaksınız ve veritabanınız bu sütun adı olarak kullanılacaktır.

İnsanlar tarafından okunabilen bir isim belirlemek için Field isteğe bağlı olarak ilk konumsal durumunu kullanabilirsiniz. BBu, Django’nun iç yapısının birkaç bölümünde kullanılır ve belgelendirme olarak iki katına çıkar.Bu alan sağlanmazsa, Django makinece okunabilir adı kullanacaktır. Bu örnekte, yalnızca Soru.yayim_tarihi insanlar tarafından okunabilen bir tanım tanımladık.Bu modeldeki diğer tüm alanlar için alanın makinece okunabilir adı, insanlar tarafından okunabilen adı olarak yeterli olacaktır.

Bazı Field sınıfları için parametreler gereklidir. Örneğin, CharField, size bir max_length gerektirir. Bu, yalnızca veritabanı şemasında değil, doğrulamada da kullanılmaktadır. İleride yakından göreceğiz.

Bir Field ayrıca çeşitli isteğe bağlı parametrelere sahip olabilir. Bu durumda, oylar alanının default değeri 0 olması gerekir.

Son olarak ForeignKey kullanarak bir ilişkinin tanımlandığını unutmayın. Django’ya her Seçim‘in tek bir Soru ile alakalı olduğunu söyler. Django, tüm ortak veritabanı ilişkilerini desteklemektedir. Bire-bir, bire-çok, çoğa-bir, çoğa-çok


Kalıpları (Model) Etkinleştirme

Model kodunun küçük bir kısmı bile Django’ya çok fazla bilgi verir.Bununla birlikte, Django şunları yapabilir:

Ancak önce projemize anketler uygulamasının yüklenmesini söylemeleyiz.

Felsefe

Django uygulamaları “takılabilir”: Bir uygulamayı birden fazla projede kullanabilirsiniz ve belirli bir Django yüklemesine bağlı olmak zorunda olmadıkları için uygulamaları dağıtabilirsiniz.

Uygulamayı projemize eklemek için INSTALLED_APPS ayar yapılandırma bölümüne eklememiz gerekiyor. AnketlerAyar sınıfı anketler/apps.py dosyasında yer alır. Bu nedenle noktalı yolu ‘anketler.apps.AnketlerAyar’ bu şekildedir. benimsite/settings.py dosyasını düzenleyin ve bu noktalı yolu INSTALLED_APPS ayarına ekleyin. Dosya şöyledir:

benimsite/settings.py


  INSTALLED_APPS = [
       'anketler.apps.AnketlerAyar' ,
       'django.contrib.admin' ,
       'django.contrib.auth' ,
       'django.contrib.contenttypes' ,
       'django.contrib.sessions' ,
       'django.contrib.messages'
       'django.contrib.staticfiles' ,
   ]

Şimdi Django anketler uygulamasının projeye nasıl eklendiğini biliyorsunuz. Örgüye tamamen dahil etmek için devam ediyoruz. Aşağıdaki komutu çalıştırın.


  $ python manage.py makemigrations anketler

Sonuç olarak şöyle bir karşılık almalısınız:


  Migrations for 'anketler':
    anketler/migrations/0001_initial.py:
      - Create model Secim
      - Create model Soru
      - Add field soru to secim

makemigrations çalıştırarak, modellerinizde bazı değişiklikler yaptınız (bu durumda yeni olanları) ve değişikliklerin bir göç olarak saklanmasını istediğinizi Django’ya belirttiniz.

Göçler (migrations), Django’nun modellerinizdeki değişiklikleri depolamasını sağlar. Bunlar sadece diskte olan dosyalardır. İsterseniz yeni modeliniz için taşıma işlemini okuyabilirsiniz; bu dosya anketler/migrations/0001_initial.py dosyasıdır. Endişelenmeyin, Django bunları her defasında oluşturduğunda okumanız beklenmiyor. Ancak Django’nun birşeyleri nasıl değiştirdiğini elle değiştirmek istediğinizde yeniden düzenlenebilir olacak şekilde tasarlanmıştır.

Göçleri sizin için gerçekleştirecek ve veritabanınızın şemasını otomatik olarak yönetebilecek bir komut var. Bu komuta migrate diyoruz. Ancak önce hangi göç işleminin olacağını göreceğiz. sqlmigrate komutu geçiş adlarını alır ve sqlmigrate döndürür:


  $ python manage.py sqlmigrate anketler 0001

Aşağıdakine benzer bir şey görmelisiniz (okunabilirlik için yeniden biçimlendirdik):


  BEGIN;
  --
  -- Secim modelini oluştur
  --
  CREATE TABLE "anketler_secim" (
      "id" serial NOT NULL PRIMARY KEY,
      "secim_metni" varchar(200) NOT NULL,
      "oylar" integer NOT NULL
  );
  --
  -- Soru modelini oluştur
  --
  CREATE TABLE "anketler_soru" (
      "id" serial NOT NULL PRIMARY KEY,
      "soru_metni" varchar(200) NOT NULL,
      "yayim_tarihi" timestamp with time zone NOT NULL
  );
  --
  -- Secim'e soru alanı ekle
  --
  ALTER TABLE "anketler_secim" ADD COLUMN "soru_id" integer NOT NULL;
  ALTER TABLE "anketler_secim" ALTER COLUMN "soru_id" DROP DEFAULT;
  CREATE INDEX "anketler_secim_7aa0f6ee" ON "anketler_secim" ("soru_id");
  ALTER TABLE "anketler_secim"
    ADD CONSTRAINT "anketler_secim_soru_id_246c99a640fbbd72_fk_anketler_soru_id"
      FOREIGN KEY ("soru_id")
      REFERENCES "anketler_soru" ("id")
      DEFERRABLE INITIALLY DEFERRED;

  COMMIT;

Aşağıdakilere dikkat edin:

İlginizi çekiyorsa python manage.py check de çalıştırabilirsiniz; bu, göç yapmadan veya veritabanına dokunmadan projenizdeki herhangi bir sorunu denetler.

Şimdi, veritabanınızda bu model tablolarını oluşturmak için migrate komutunu tekrar çalıştırın.


$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, anketler, sessions
Running migrations:
  Rendering model states... DONE
  Applying anketler.0001_initial... OK

Göç komutu, uygulanmış olan tüm göçleri alır (Django, hangilerinin veritabanında django_migrations olarak adlandırılan özel bir tablo kullanılarak uygulandığını izler) ve bunları veritabanınıza karşı çalıştırır; aslında, modellerinizde yaptığınız değişiklikleri şema ile uyumlu yapar.

Geçişler çok güçlüdür ve veritabanınızı veya tablolarınızı silmenize, yenilikler yapmanıza gerek kalmadan projenizi geliştirirken zamanla modellerinizi değiştirmenizi sağlar. Veri kaybetmeden canlı olarak veritabanınızı güncelleme konusunda uzmanlaşmıştır. Öğreticinin daha sonraki bölümünde ayrıntılı bir şekilde değineceğiz. Ancak şimdilik, model değişikliklerini yapmak için üç adımlı kılavuzu unutmayın:

Göç işlemleri yapmak ve uygulamak için ayrı komutların bulunmasının nedeni, sürüm denetimi sistemimize göç işlemlerini taahhüt etmeniz ve bunları uygulamanızla birlikte göndereceğiniz olmasıdır. Yalnızca gelişiminizi kolaylaştırmakla kalmaz aynı zamanda diğer geliştiriciler tarafından da kullanılabilirler ve üretim aşamasında olurlar.

manage.py yardımcı programının neler yapabileceği hakkında tam bilgi için django-admin belgelerini okuyun.


API ile oynamak

Şimdi etkileşimli Python kabuğuna atlayalım ve Django’nun sunduğu ücretsiz API ile oynamaya başlayalım. Python kabuğunu çağırmak için şu komutu kullanın:


  $ python manage.py shell

Bunu yalnızca basitçe “python” yazarak kullanıyoruz. Çünkü manage.py, DJANGO_SETTINGS_MODULE ortam değişkenini ayarlar; Django’ya benimsite/settings.py dosyanıza Python içe aktarma yolu verir.

Manage.py’yi atlama

manage.py kullanmayı tercih ederseniz sorun değil. Sadece DJANGO_SETTINGS_MODULE ortam değişkeni benimsite.settings, düz bir Python kabuğu başlatın ve Django’yu kurun:


  >>> import django
  >>> django.setup()

Bu bir AttributeError oluşturursa, muhtemelen Django’nun bu öğretici sürümle eşleşmeyen bir sürümünü kullanıyorsunuz demektir. Ya eski öğreticiye veya daya yeni Django sürümüne geçmek isteyeceksiniz.

Manage.py dosyasının bulunduğu dizinden python çalıştırmalısınız veya bu dizinin python yolunda olduğundan emin olun. Böylece import benimsite çalışacaktır.

Tüm bunlar hakkında daha fazla bilgi için django-admin belgelerine bakın.

Kabukta iken veritabanı API‘sini keşfedin:


  >>> from anketler.models import Soru, Secim   # Sadece yazdığımız model sınıflarını içe aktarın.

  # Sistemde henüz hiçbir soru yok.
  >>> Soru.objects.all()
  <QuerySet []>

  # Yeni bir Soru oluştur.
  # Varsayılan ayarlar dosyasında zaman dilimlerinin desteği etkin olduğundan,
  # bu nedenle Django yayim_tarihi için tzinfo ile bir datetime bekliyor.
  # timezone.now() kullanın datatime.datetime.now() yerine... Ve doğru olanı yapacağız.
  >>> from django.utils import timezone
  >>> q = Soru(soru_metni="Yenilikler ne?", yayim_tarihi=timezone.now())

  # Nesneyi veritabanına kaydedin. save() öğesini açıkça çağırmalısınız.
  >>> q.save()

  # Şimdi bir ID'si var.
  >>> q.id
  1

  # Python nitelikleri üzerinden model alan değerlerine erişir.
  >>> q.soru_metni
  "Yenilikler ne?"
  >>> q.yayim_tarihi
  datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

  # Öznitelikleri değiştirip sonra save() yöntemini çağırarak değerleri değiştirin.
  >>> q.soru_metni = "N'haber?"
  >>> q.save()

  # objects.all() veritabanındaki tüm soruları görüntüler.
  >>> Soru.objects.all()
  <QuerySet [<Soru: Soru object (1)>]>

Bir dakika bekle. <Soru: Soru object (1)>, bu nesnenin yararlı bir gösterimi değil. Soru kalıbını (anketler/models.py dosyasında) düzenleyerek ve hem Soru hem de Secim bir __str__() yöntemi ekleyerek düzeltelim:

anketler/models.py


  from django.db import models

  class Soru(models.Model):
      # ...
      def __str__(self):
          return self.soru_metni

  class Secim(models.Model):
      # ...
      def __str__(self):
          return self.secim_metni

__str__() yöntemlerini modellerinize eklemek önemlidir; yalnızca etkileşimli istemle uğraşırken kendi kolaylığınız için değil, aynı zamanda nesnelerin temsilleri Django’nun doğal olarak oluşturulan yönetici tarafından kullanıldığı için de geçerlidir. Bunların olağan Python yöntemleri olduğuna dikkat edin. Demo için özel bir yöntem ekleyelim:

anketler/models.py


import datetime

from django.db import models
from django.utils import timezone


class Soru(models.Model):
    # ...
    def was_published_recently(self):
        return self.yayim_tarihi >= timezone.now() - datetime.timedelta(days=1)

import datetime ekini ve django.utils import timezone‘u, sırasıyla django.utils.timezone içindeki Python standart datetime modülüne ve Django saat dilimi ile ilgili yardımcı programlara başvurmaya dikkat edin. Python’da saat dilimini işleme konusunda bilginiz yoksa, saat dilimi destek belgelerinde daha fazla bilgi edinebilirsiniz.

Bu değişiklikleri kaydedin ve python manage.py shell tekrar çalıştırarak yeni bir Python etkileşimli kabuğu başlatın:


  >>> from anketler.models import Soru, Secim

  # __str__() ekimizin çalıştığından emin olun.
  >>> Soru.objects.all()
  <QuerySet [<Soru: Yenilikler ne?>]>

  # Django, tamamen anahtar sözcükler tarafından yönlendirilen
  # zengin bir veritabanı arama API'si sağlar.
  >>> Soru.objects.filter(id=1)
  <QuerySet [<Soru: Yenilikler ne?>]>
  >>> Soru.objects.filter(soru_metni__startswith='Yenilikler')
  <QuerySet [<Soru: Yenilikler ne?>]>

  # Bu yıl yayınlanan soruyu cevaplayın.
  >>> from django.utils import timezone
  >>> simdiki_yil = timezone.now().year
  >>> Soru.objects.get(yayim_tarihi__year=simdiki_yil)
  <Soru: Yenilikler ne?>

  # Var olmayan bir kimlik isteğinde bulunduğunuzda, bu bir istisna oluşturacaktır.
  >>> Soru.objects.get(id=2)
  Traceback (most recent call last):
      ...
  DoesNotExist: Soru matching query does not exist.

  # Birincil anahtarla arama en yaygın olanıdır. bu yüzden Django, birincil anahtar tam aramaları için kısayol sağlar.
  # Aşağıdakiler Soru.objects.get(id=1) ile aynıdır.
  >>> Soru.objects.get(pk=1)
  <Soru: Yenilikler ne?>

  # Özel yöntemimizin çalıştığından emin olun.
  >>> q = Soru.objects.get(pk=1)
  >>> q.was_published_recently()
  True

  # Soru için birkaç seçenek verin. Create çağrısı yeni bir
  # Secim nesnesi oluşturur, INSERT deyimi yapar, seiçimi kullanılabilir seçenekler
  # grubuna ekler ve yeni Secim nesnesini döndürür.
  >>> q = Soru.objects.get(pk=1)

  # İlgili nesne setinden herhangi bir seçeneği görüntüler. Şimdiye kadar hiçbiri görüntüleniyor.
  >>> q.secim_set.all()
  <QuerySet []>

  # Üç seçenek oluşturun.
  >>> q.secim_set.create(secim_metni='Fazla değil', oylar=0)
  <Secim: Not much>
  >>> q.secim_set.create(secim_metni='Gökyüzü', oylar=0)
  <Secim: The sky>
  >>> c = q.secim_set.create(secim_metni='Sadece tekrar hackleniyor', oylar=0)

  # Seçim nesnelerinin, ilgili Soru nesnelerine API erişimi vardır.
  >>> c.soru
  <Question: Yenilikler ne?>

  # Ve tersi de mümkün: Soru nesneleri Secim nesnelerine erişebilir.
  >>> q.secim_set.all()
  <QuerySet [<Secim: Fazla değil>, <Secim: Gökyüzü>, <Secim: Sadece tekrar hackleniyor>]>
  >>> q.secim_set.count()
  3

  # API, ilişkileri ihtiyacınız olan yere kadar doğal olarak izler. İlişkileri ayırmak için çift altçizgi kullanın.
  # Bu istediğiniz kadar çok derinlikli olarak çalışır. Yani sınır yok. Bu sene yayim_tarihi olan herhangi bir sorunun
  # seçimini yapın (yukarıda oluşturduğumuz 'simdiki_yil' değişkenini tekrar kullanın.)
  >>> Secim.objects.filter(question__pub_date__year=current_year)
  <QuerySet [<Secim: Fazla değil>, <Secim: Gökyüzü>, <Secim: Sadece tekrar hackleniyor>]>

  # Seçimlerden birini silelim. Bunun için delete() kullanın.
  >>> c = q.secim_set.filter(secim_metni__startswith='Sadece tekrar')
  >>> c.delete()

Kalıp ilişkileri hakkında daha fazla bilgi için bkz. İlgili nesnelere erişme. API aracılığıyla alan araştırmaları yapmak için çift altçizgi kullanma konusunda daha fazla bilgi için bkz: Alan arama. Veritabanı API’si ile ilgili tüm ayrıntılar için Veritabanı API’si başvurumuza bakın.


Django Yönetici Tanıtımı

### Felsefe Personeliniz veya müşterileriniz için içerik eklemek, değiştirmek ve silmek için yönetici siteleri oluşturmak çok yaratıcılık gerektirmeyen sıkıcı bir iştir. Bu nedenle, Django tamamen modeller için yönetici arayüzlerinin oluşturulmasını doğallaştırır. Django, "içerik yayıncıları" ile "kamu" sitesi arasında çok net bir ayrımla, bir habercilik odası ortamında yazılmıştır. Site yöneticileri, haber öyküleri, etkinlikler, spor skorları vb. eklemek için örgüyü kullanır ve bu içerik genel sitede görüntülenir. Django, site yöneticilerinin içeriği düzenlemeleri için birleşik bir arabirim oluşturma sorunu çözer. Yönetici, site ziyaretçileri tarafından kullanılacak şekilde tasarlanmamıştır. Site yöneticileri içindir.

Yönetici kullanıcısı oluşturma

Önce, yönetici siteye giriş yapabilecek bir kullanıcı oluşturmamız gerekecek. Aşağıdaki komutu çalıştırın:


  $ python manage.py createsuperuser

İstediğiniz kullanıcı adını girin ve enter tuşuna basın:


  Username: admin

Ardından istediğiniz e-posta adresini girmeniz istenir:


  Email address: admin@example.com

Son adım şifrenizi girmektir. İki kez şifrenizi girmeniz istenecek ve ikinci seferinde ilk şifrenizi onaylayacaksınız.


  Password: **********
  Password (again): *********
  Superuser created successfully.

Geliştirme sunucunusu başlatmak (yerel sunucu)

Django admin sitesi varsayılan olarak etkinleştirilir. Gelişim sunucusuna başlayalım ve keşfedelim. Sunucu çalışmıyorsa, şu şekilde başlatın:


  $ python manage.py runserver

Şimdi, bir internet ağı tarayıcısı açın ve yerel etki alanınızdaki “/admin/” adresine gidin. Örneğin http://127.0.0.1:8000/admin/ Yöneticinin giriş ekranı karşınıza gelecektir.

Çeviri varsayılan olarak açık olduğundan, giriş ekranı, tarayıcınızın ayarlarına ve Django’nun bu dil için bir çeviri yapmasına bağlı olarak kendi dilinizde görüntülenebilir.


Admin sitesini giriniz

Şimdi, önceki adımda oluşturduğunuz süper kullanıcı hesabı ile giriş yapmayı deneyin. Django admin dizin sayfasını görmelisiniz:

Düzenlenebilir içerik türlerinden bazılarını görmelisiniz: gruplar ve kullanıcılar. Django tarafından gönderilen kimlik doğrulama çerçevesi olan django.contrib.auth tarafından sağlanmaktadır.


Anket uygulamasını admin’de değiştirilebilir yapın

Ama bizim anket uygulaması nerede? Yönetici dizini sayfasında görüntülenmez. Yapmanız gereken tek şey: Yöneticiye, Soru nesnelerinin yönetici arayüzüne sahip oldğunu söylememiz gerekiyor. Bunu yapmak için anketler/admin.py dosyasını açın ve şu şekilde düzenleyin:

anketler/admin.py


  from django.contrib import admin

  from .models import Soru

  admin.site.register(Soru)

Ücretsiz admin işlevini keşfedin

Artık Soru kısmını kaydettik, Django bunun admin dizini sayfasında gösterileceğini biliyor:

“Sorular”‘ı tıklayın Artık sorularınız için “değişim listesi” sayfasındasınız. Bu sayfada veritabanındaki tüm sorular görüntülenir ve bunları değiştirmek için birini seçmenizi sağlar. Daha önce yarattığımız “Yenilikler ne?” sorusu var:

Düzenlemek için “Yenilikler ne?” sorusuna tıklayın:

Burada dikkat edilmesi gereken hususlar:

Sayfanın alt kısmı size birkaç seçenek sunar:

“Yayınlanan tarih” in değeri Öğretici 1‘de soru oluşturduğunuz saatle eşleşmiyorsa, muhtemelen TIME_ZONE ayarı için doğru değeri ayarlamayı unuttuğunuz anlamına gelir. Değiştirin, sayfayı yeniden yükleyin ve doğru değerin göründüğünden emin olun.

“Bugün” ve “Şimdi” kısayollarını tıklatarak “Yayınlanan tarihi” değiştirin. Daha sonra “Kaydet ve devam et”i tıklayın. Ardından sağ üst köşedeki “Geçmiş”i tıklayın. Bu nesne yapılan değişikliklerin tümünü Django yöneticisi aracılığıyla, değişikliği yapan kişinin zaman damgası ve kullanıcı adı ile birlikte listelendiği bir sayfa görürsünüz:

Modeller API’sinden memnun kaldıysanız ve kendinizi yönetici sitesiyle tanıdıysanız, anket uygulamalarımıza daha fazla görünüm ekleme hakkında bilgi edinmek için Öğretici 3 bölümünü okuyun.

İlk django uygulamanızı yazma, bölüm 1 İlk django uygulamanızı yazma, bölüm 3