Django'da Veritabanı İlişkilerini Anlayın

Django'da Veritabanı İlişkilerini Anlayın
Sizin gibi okuyucular MUO'yu desteklemeye yardımcı oluyor. Sitemizdeki bağlantıları kullanarak bir satın alma işlemi gerçekleştirdiğinizde, bir ortaklık komisyonu kazanabiliriz.

Veritabanı ilişkisi, farklı veritabanı tabloları arasındaki bağlantıyı açıklar. İlişkiler, verilerin nasıl saklanacağını ve alınacağını belirler. Django, ilişkisel veritabanı sistemleri (RDBMS) ile iyi çalışır. Bu nedenle, veritabanı tablosu ilişkilerini destekler.





İlişki türleri, uygulamanızın gereksinimlerine ve modellediği verilere bağlıdır. Django modelleri ve veritabanı arasındaki iyi ilişkiler, veri bakımını geliştirir. Bu, sorgu performansını iyileştirmeyi ve veri tekrarını azaltmayı içerir.





GÜNÜN MAKALE VİDEOSU

Üç ana ilişki türünü keşfederek Django veritabanı ilişkilerinin uygulama performansını nasıl etkilediğini öğrenebilirsiniz.





Veritabanı İlişkileri

İlişkisel veritabanı sistemleri, üç tür veritabanı ilişkisini destekler. Bu ilişkiler birden çoğa, çoktan çoğa ve bire birdir. Veritabanı ilişkisinin türü, uygulamanızın kullanım durumlarını etkiler.

Django modelleri uygulamadaki veritabanı tablolarını temsil eder. İyi bir veritabanı sistemi oluşturmak için tablolar arasında iyi ilişkiler kurmalısınız. Veritabanı ilişkileri, uygulamanızda verilerin nasıl saklanacağını ve sunulacağını belirler.



Veritabanı ilişkilerini anlamak için, Django projesi oluşturma adlı Davlumbazlar. Uygulama bir mahalle sosyal ağı olacak. Çeşitli mahallelerin sosyal aktivitelerini, güvenliğini ve işletmelerini yönetecek.

Sakinler kaydolabilir, oturum açabilir ve profil oluşturabilir. Ayrıca herkesin görmesi için yayınlar ve iş reklamları oluşturabilirler.





Başlamak için tüm mahalle verilerini depolayacak bir veritabanı oluşturun. Ardından Profile, NeighborHood, Business ve Post modellerini oluşturacaksınız. Modelleri oluşturmak için veritabanı tablolarının ihtiyaç duyduğu ilişkiyi belirlemelisiniz.

Bire Bir Veritabanı İlişkisi

Bire bir ilişki, bir Django modelindeki bir kaydın başka bir modeldeki başka bir kayıtla ilişkili olduğunu ima eder. İki kayıt birbirine bağlıdır. bu durumda, Profil modeli bağlıdır kullanıcı modeli yerleşik profiller oluşturmak için.





Bu nedenle, uygulamada kayıtlı her sakin için yalnızca bir profil olabilir. Ayrıca, bir kullanıcı olmadan bir profil var olamaz.

from django.db import models 
from django.contrib.auth.models import User

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
name = models.CharField(max_length=80, blank=True)
bio = models.TextField(max_length=254, blank=True)
profile_picture = CloudinaryField('profile_picture', default='default.png')
location = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(null=True)

def __str__(self):
return f'{self.user.username} profile'

Django'nun Kullanıcı modeli Django'da yerleşik bir kimlik doğrulama modelidir. Bunun için bir model oluşturmanıza gerek yok. Bunun yerine, şuradan içe aktarın: django.contrib.auth. bu OneToOneField() üzerinde Profil modeli bire bir ilişkiyi tanımlar.

bir video dosyası nasıl bozulur

bu on_delete=models.CASCADE argümanı bu kayıtlardan birinin silinmesini engeller. Kayıtları her iki tablodan da silmelisiniz.

Uygulamanızdaki ilişkiyi görselleştirmek için Django yönetici arayüzünü kullanabilirsiniz. Django admin'de oturum açmak için, yönetici olarak bilinen bir yönetici kullanıcı olarak kayıt olmalısınız. süper kullanıcı .

Terminalde aşağıdaki komutu çalıştırarak bir süper kullanıcı oluşturun:

python manage.py createsuperuser

Kullanıcı adınızı, e-posta adresinizi ve şifrenizi girmeniz istenecektir. Bunu yaptıktan sonra sunucuyu başlatın.

http://127.0.0.1:8000/admin URL'sini kullanarak yönetici sayfasını bir tarayıcıda açın.

Daha önce oluşturduğunuz kimlik bilgileriyle giriş yapabileceğiniz yönetici sayfasını göreceksiniz. Giriş yaptıktan sonra şunu göreceksiniz: Gruplar ve Kullanıcılar nesneler. Django kimlik doğrulama çerçevesi bu iki modeli yönetir. Alt kısımda, Profil modeli.

windows bu ağın proxy ayarlarını otomatik olarak algılayamaz

Profil modelleyin ve bir profil eklemeye devam edin. Aşağıdaki gibi göründüğünü göreceksiniz:

  Profil ve kullanıcı modelleri arasındaki ilişkiyi gösteren Django yönetici

Bir kullanıcı için profil oluşturma seçeneğiniz olduğuna dikkat edin. OneToOneField() veri türü, kimliği doğrulanmış kullanıcılar için profiller oluşturmanıza olanak tanır. Uygulama, bire bir ilişkileri bu şekilde yönetir.

Bire Çok İlişkiler

A birden çoğa ilişki, bir modeldeki bir kaydın başka bir modeldeki birçok kayıtla ilişkilendirildiği anlamına gelir. Çoktan bire bir ilişki olarak da adlandırılır.

Sizin durumunuzda, bir yönetici birkaç mahalle oluşturabilir. Ancak her mahalle yalnızca bir yöneticiye ait olabilir. Böyle bir ilişkiyi tanımlamak için ForeignKey veri türünü kullanabilirsiniz.

Django yerleşik bir yönetici arayüzüne sahiptir. Bunun için bir model oluşturmanıza gerek yok. Yönetici, yönetici panelinden içeriği yönetme ve uygulamayı görselleştirme hakkına sahiptir.

Birçok kaydı barındıran model, Yabancı anahtar . İlişkiyi bire çok olarak tanımlar. Aşağıdaki kod, anahtarın nereye yerleştirileceğini gösterir.

class NeighbourHood(models.Model): 
admin = models.ForeignKey("Profile", on_delete=models.CASCADE, related_name='hood')
name = models.CharField(max_length=50)
location = models.CharField(max_length=60)
hood_logo = CloudinaryField('hood_logo', default='default.png')
description = models.TextField()
health_tell = models.IntegerField(null=True, blank=True)
police_number = models.IntegerField(null=True, blank=True)
Count= models.IntegerField(null=True, blank=True)

def __str__(self):
return f'{self.name} hood'

Resimde gösterildiği gibi uygulamada ilişkiyi görebilirsiniz:

  Mahalle modeli, Yönetici seçiminin eklendiğini gösteriyor

bu Komşu modelin artık bir yöneticisi var. Herkesin bir mahalle oluşturabilmesi için yönetici haklarına sahip olması gerekir. Ve bir mahallenin çok sayıda yöneticisi olamaz.

Çoktan Çoğa Veritabanı İlişkileri

çoktan çoğa ilişkiler, bir modeldeki birçok kayıt diğerinde diğerleriyle ilişkilendirilir. Örneğin, Postalamak ve İşletme modeller birbirinin birkaç kaydına sahip olabilir. Kullanıcılar gönderilerinde birkaç iş ilanı yapabilir ve bunun tersi de geçerlidir.

Ancak, çoktan çoğa ilişkiler oluşturmak hatalı verilere yol açabilir. Diğer çerçevelerde, iki tabloyu birleştirmek için yeni bir tablo oluşturmanız gerekir.

Django'nun bunun için bir çözümü var. Çoktan çoğa alanını kullandığınızda, iki tabloyu birlikte eşleyen yeni bir tablo oluşturur. . Çoktan çoğa alanını iki modelden birine koyabilirsiniz, ancak her iki modelde de olmamalıdır.

şeffaf arka plan nasıl elde edilir
class Post(models.Model): 
title = models.CharField(max_length=120, null=True)
post = models.TextField()
date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='post_owner')
hood = models.ForeignKey(NeighbourHood, on_delete=models.CASCADE, related_name='hood_post')
business = models.ManyToManyField(Business)

def __str__(self):
return f'{self.title} post'

Şimdi, görüntülediğinizde Postalamak admin panelindeki model, bir gönderiye birkaç işletme ekleyebilirsiniz.

  Posta modelinde birkaç işletme ekleme seçeneği vardır

Django Veritabanı İlişkilerini Basitleştiriyor

Uygulamanız için kullandığınız veritabanı türü, verilerin nasıl kullanılacağını belirler. Django, ilişkisel veritabanlarını bağlamayı ve çalıştırmayı kolaylaştıran kapsamlı bir sisteme sahiptir.

Django özellikleri, ilgili tablolardan veri depolamayı ve almayı kolaylaştırır. Uygulamanız için veritabanı ilişkileri kuran ve oluşturan yerleşik API'lere sahiptir.

Veritabanı ilişkileri, uygulamanızın davranışını belirler. Bire bir, bire çoğa veya çoktan çoğa ilişkiler kullanıp kullanmadığınız size bağlıdır.

Django ile uygulamanızı bozmadan özellikleri yapılandırabilir ve test edebilirsiniz. Veritabanı sistemlerinin güvenliğini sağlamak ve geliştirici deneyiminizi optimize etmek için Django'yu kullanın.