Django Notlarım 2

Published by: 0

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/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir