Django Model oluşturma
Models.py dosyasında şu şekilde model oluşturulabilir. Burdaki model aslında veritabanındaki tablo yapısı olarakta anlaşılabilir.
class Blog(models.Model):
title= models.CharField(max_length=100, blank=False, null=True, verbose_name="Başlık Giriniz",
help_text="Başlık bilgisi burada girilir.")
icerik=models.TextField(max_length=1000,verbose_name="İçerik Giriniz",help_text="içerik yazısı burada yazılır.",
null=True, blank=False)
create_date = models.DateTimeField(auto_now_add=True,auto_now=False)# içerik her güncellendiğinde oluşturma tarihi güncellenmesin
update_date = models.DateTimeField(auto_now_add=True) # güncellenme tarihi burada tutulsun
Modelimizi ekleyebilmemiz için
Python manage.py migrations
Komutu kullanılır
Tabi öncesinde settings.py dosyasında
İnstalled_api içerisine app mizi ‘blog şeklinde kod satırı eklememiz gerekiyor’
Sonrasında kodumuzu çalıştırdığımızda migrations klasöründe initial.py adında bir dosya oluşur ve migration yapımız otomatik oluşturulur.
Daha sonra migration u oluşturmamız için
python manage.py migrate komutu çalıştırılır
Django Admin sayfası
hakihazırda djangoda kurulu bir login sayfası ve admin paneli kurulu gelmektedir.
Python manage.py runserver dedikten sonra
http://127.0.0.1:8000/admin/
linkine girdiğimizde login sayfasıyla karşılaşıyoruz.
Peki kullanıcı adı şifre dedir nasıl oluşturulur?
Python manage.py createsuperuser # süper user tüm yetkilere sahip kullanıcıdır
Komutunu terminalden çalıştırıyoruz
Kullanıcı adı, şifre mail adresi girip kullanıcı oluşturuyoruz
Sonra terminalden app mizi tekrar runserver yardımıyla çalıştırıp giriş yapıyoruz. Djangonun
Kurulu olarak gelen admin paneline erişmiş oluyoruz
Burada kullanıcı oluşturma gurup oluşturma, kullanıcıyı guruba atama, gurup ve kullanıcı izinlerini yetkilerini düzenleme yapabiliriz.
Daha önce oluşturduğumuz modelin admin panelinde görülebilmesi için admin.py dosyasında import etmemiz gerekir.
from .models import Blog
bu modelin admin sayfasında görülebilmesi içinde; admin.site.register(Blog)
Şimdi admin panelimizde Blogs diye görünmektedir. Farklı bir isim vermek istiyorsak models.py dosyasında modelimizin içine
class Meta:
verbose_name='Blog'
kodunu yazıyoruz. Burda plural yapmamızın sebebi çoğul eki olan s takısını koymak istememizdir.
Blog ekle dediğimizde formu doldurup kaydet dediğimizde blog object ismi olarak kaydedecek herseferinde. Bu kargaşayı engellemek için Model sınıfımızın içine şu kod satırları eklenebilir.
ef __str__(self): # self ile modelin tanımlamalarına erişebiliyoruz
return "%s" % (self.title)
Django Orm yapısı kullanarak veritabanı kayıt işlemi
Kayıt ekleme/sorgulama
Öncelikle oluşturulan model import edilmelidir.
Python console da şu kod yazılır
from blog.models import Blog
daha sonra işlemler için
create işlemi için
blog adında Blog türünde bir değişken tanımlamak için console da
blog=Blog()
çalıştırılır
blog.title=’Şehirler Tanıtım’
blog.icerik=’En büyük şehir istanbuldur’
bu blog değişkenini veritabanına eklemek istersek şu komut satırı çalıştırılır
blog.save()
artık admin panelinde blog listesinde Şehirler tanıtımı görünecektir.
Teksatırda kayıt işlemi yapmak için
blog=Blog(title=’Felsefe taşı’, icerik=’yok öyle bi taş:’)
daha sonra tekrar blog.save() dersek veritabanına kayıt sağlanmış olur
güncelleme işlemleri için
blog.title=’felsefe tşları’
blog.save()
kodları çalıştırılırsa başlık güncellenmiş olur.
Veritabanı kayıt işlemini de dahil edip tek satırda tüm işlemler için;
X=Blog.objects.create(title=’urfa’,içerik=’şanlıdır’) #object kalıtım aldığımız modelden geliyor
Komut satırı kullanılır.
Tüm blog başlıklarını çekmek istersek
Blog.objects.all()
Bu çektiğimiz verileri bir listeye (değişkene) atamak istersek
blog_list=Blog.objects.all()
bu listeyi görüntülemek istersek
blog_list
Komutu yazmamız yeterli olacaktır.
ORM’de Filtreleme yapmak istersek
Blog.objects.filter(title=’ilk blog’)
Harici bir değer girip filtreleme yapmak istersek
Blog.objects.exclude(title=’ilk blog’) # title ‘ı ilk blog olan hariç diğerleri filtrelenmiş oluyor
Belirli bir kısmı içeren filtreleme sorgusu. Harf duyarlılığı olan arama
Blog.objects.filter(title__contains=’ilk’) # gene ilk blog başlığında olan bloğu getirir. Büyük küçük harf duyarlılığı yoktur.
Blog.objects.filter(title__exact='ilk') #tamı tamına ne yazıldıysa onu getirir. Harf duyarlılığı yoktur. İexact olarak kullanılırsa harf duyarlılığı da içerir.
Blog.objects.filter(title__startswith='il') # title’ı ‘il ile başlayanları getir ’
Bu filtrelemeleri create_date ‘in yılı üzerinden yapmak istesek;
Blog.objects.filter(title__contains=’ilk’,create_date__year=2019) # burada iki şart arasında virgül olması ‘and’ mantığıyla çalışmaktadır.
Blog.objects.filter(create_date__year__gt=2018) # create_date yılı 2018 den büyük olanları getiriyor
Blog.objects.filter(create_date__year__gt=2018).first() #bu komut satırı ile yapılan sorgunun ilk elemanı getirilebilir. last() komutuda son nesneyi getir.
Django ORM yapısında GET ile nesne getirme
sorgular= Blog.objects.filter(create_date__year__gt=2018) # dizi nesnesi içine atıyoruz sonuçlarımızı
sorgular.first() # dizimizin ilk nesnesini getirir
sorgular.last() # son nesnesini getirir
Benzersiz bir nesne döndürmek istediğimizde
Öncelikle elimizde neler var görmek için tüm verileri çekiyorum
dizim= Blog.objects.all()
for blog in dizim:
print(blog.pk,blog.id,blog.title,blog.icerik) # pk=primary key
Bize şöyle bir çıktı verir
1 1 ilk blog selam sana ey django.
2 2 ikinci blog inşallah bu hız devam eder ama yeterli de değil:)
3 3 Şehirler Tanıtım En büyük şehir istanbuldur
4 4 felsefe tşları yok öyle bi taş:
5 5 urfa şanlıdır
Benzersiz bir nesneyi get komutuyla getitiriz
obj=Blog.objects.get(id=1)
print(obj)
olmayan bir id ile sorgu yaparsak eğer
obj=Blog.objects.get(id=23)
bu komut sonunda şöyle bir hata verecektir. “blog.models.DoesNotExist: Blog matching query does not exist.”
Ama bunu filter ile yaparsak hata vermez sadece nesnemizin içini boş bırakır.
Django ORM yapısında Delete
obj=Blog.objects.get(id=4)
obj.delete()
tek satırda yapmak istersek;
Blog.objects.get(id=4).delete() # silme işlemi bu komut yardımıyla yapılabilir.
ORM yapıları hakkında detaylı bilgi için https://docs.djangoproject.com/en/2.1/topics/db/queries/