خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

روابط پایگاه داده در جنگو را درک کنید

درست کردن روابط جدول شما کلید ایجاد یک مدل داده جامد است.

یک رابطه پایگاه داده ارتباط بین جداول مختلف پایگاه داده را توصیف می کند. این روابط نحوه ذخیره و بازیابی داده ها را تعیین می کند. جنگو با سیستم های پایگاه داده رابطه ای (RDBMS) به خوبی کار می کند. بنابراین، از روابط جدول پایگاه داده پشتیبانی می کند.

انواع روابط به الزامات برنامه شما و داده هایی که مدل می کند بستگی دارد. روابط خوب بین مدل های جنگو و پایگاه داده باعث بهبود نگهداری داده ها می شود. این شامل بهبود عملکرد پرس و جو و کاهش تکرار داده ها است.

شما می توانید با بررسی سه نوع اصلی رابطه یاد بگیرید که چگونه روابط پایگاه داده جنگو بر عملکرد برنامه تاثیر می گذارد.

روابط پایگاه داده

سیستم های پایگاه داده رابطه ای از سه نوع روابط پایگاه داده پشتیبانی می کنند. این روابط یک به چند، چند به چند و یک به یک است. نوع رابطه پایگاه داده بر موارد استفاده برنامه شما تأثیر می گذارد.

مدل‌های جنگو جداول پایگاه داده را در برنامه نشان می‌دهند. برای ایجاد یک سیستم پایگاه داده خوب باید روابط خوبی بین جداول ایجاد کنید. روابط پایگاه داده نحوه ذخیره و ارائه داده ها را در برنامه شما تعیین می کند.

برای درک روابط پایگاه داده، با ایجاد یک پروژه جنگو به نام Hoods شروع کنید. این برنامه یک شبکه اجتماعی محله خواهد بود. فعالیت های اجتماعی، امنیت و کسب و کار محله های مختلف را مدیریت خواهد کرد.

ساکنین می توانند ثبت نام کنند، وارد سیستم شوند و نمایه ایجاد کنند. آنها همچنین می توانند پست ها و تبلیغات تجاری ایجاد کنند تا همه ببینند.

برای شروع، یک پایگاه داده ایجاد کنید که تمام داده های محله را ذخیره کند. سپس، مدل های Profile، NeighborHood، Business و Post را ایجاد می کنید. برای ایجاد مدل ها، باید رابطه مورد نیاز جداول پایگاه داده را تعیین کنید.

مطلب مرتبط:   نحوه نمایش تصاویر در بازی خود با PyGame

ارتباط یک به یک پایگاه داده

یک رابطه یک به یک به معنای یک رکورد در یک مدل جنگو به رکورد دیگری در مدل دیگر است. این دو رکورد به یکدیگر بستگی دارند. در این حالت، مدل Profile برای ایجاد پروفایل های ساکن به مدل User بستگی دارد.

بنابراین تنها یک نمایه برای هر ساکن ثبت شده در برنامه وجود دارد. همچنین بدون کاربر، پروفایل نمی تواند وجود داشته باشد.

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.contrib.auth وارد کنید. OneToOneField() در مدل Profile یک رابطه یک به یک را تعریف می کند.

آرگومان on_delete=models.CASCADE از حذف یکی از این رکوردها جلوگیری می کند. شما باید رکوردها را از هر دو جدول حذف کنید.

می توانید از رابط مدیریت جنگو برای تجسم رابطه در برنامه خود استفاده کنید. برای ورود به ادمین جنگو، باید به عنوان یک کاربر ادمین معروف به ابرکاربر ثبت نام کنید.

با اجرای دستور زیر در ترمینال یک ابر کاربر ایجاد کنید:

python manage.py createsuperuser

یک اعلان برای وارد کردن نام کاربری، ایمیل و رمز عبور وجود دارد. پس از انجام این کار، سرور را راه اندازی کنید.

صفحه مدیریت را در مرورگر با استفاده از URL http://127.0.0.1:8000/admin باز کنید.

صفحه مدیریتی را مشاهده خواهید کرد که در آن می توانید با اعتبارنامه هایی که قبلا ایجاد کرده اید وارد شوید. پس از ورود به سیستم، اشیاء Groups و Users را مشاهده خواهید کرد. چارچوب احراز هویت جنگو این دو مدل را مدیریت می کند. در پایین، مدل Profile را مشاهده خواهید کرد.

مطلب مرتبط:   راهنمای استفاده از JSON در Go

مدل Profile را باز کنید و به افزودن پروفایل ادامه دهید. خواهید دید که به صورت زیر ظاهر می شود:

مدیر جنگو در حال نمایش رابطه بین پروفایل و مدل های کاربر

توجه داشته باشید که گزینه ایجاد پروفایل برای یک کاربر را دارید. نوع داده ()OneToOneField به شما امکان می دهد پروفایل هایی برای کاربران احراز هویت شده ایجاد کنید. اینگونه است که برنامه روابط یک به یک را مدیریت می کند.

روابط یک به چند

رابطه یک به چند به این معنی است که یک رکورد در یک مدل با رکوردهای زیادی در مدل دیگر مرتبط است. از آن به عنوان رابطه چند به یک نیز یاد می شود.

در مورد شما، یک مدیر می تواند چندین محله ایجاد کند. اما هر محله فقط می تواند متعلق به یک ادمین باشد. برای تعریف چنین رابطه ای می توانید از نوع داده ForeignKey استفاده کنید.

جنگو دارای یک رابط مدیریت داخلی است. لازم نیست برای آن مدل بسازید. ادمین حق مدیریت محتوا و تجسم برنامه را از پنل مدیریت دارد.

مدلی که رکوردهای زیادی را در خود جای می دهد دارای کلید خارجی خواهد بود. این رابطه را یک به چند تعریف می کند. کد زیر محل قرار دادن کلید را نشان می دهد.

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'

می توانید رابطه را در برنامه همانطور که در تصویر نشان داده شده است ببینید:

مدل محله نشان می دهد که گزینه Admin اضافه شده است

مدل NeighborHood اکنون یک ادمین دارد. برای اینکه هر کسی بتواند یک محله ایجاد کند، باید حقوق مدیریت داشته باشد. و یک محله نمی تواند مدیران زیادی داشته باشد.

روابط چند به چند پایگاه داده

در روابط چند به چند، بسیاری از رکوردها در یک مدل با دیگران در مدل دیگر مرتبط می شوند. به عنوان مثال، مدل‌های Post و Business می‌توانند چندین رکورد از یکدیگر داشته باشند. کاربران می توانند چندین آگهی تجاری در پست های خود ایجاد کنند و بالعکس.

مطلب مرتبط:   ایجاد دارایی های بازی با ابزارهای طراحی Arcade

با این حال، ایجاد روابط چند به چند می تواند منجر به داده های نادرست شود. در چارچوب های دیگر، برای پیوستن به دو جدول، باید یک جدول جدید ایجاد کنید.

جنگو راه حلی برای این موضوع دارد. هنگامی که از فیلد چند به چند استفاده می کنید، یک جدول جدید ایجاد می کند که دو جدول را با هم نگاشت می کند. می توانید فیلد چند به چند را در هر یک از دو مدل قرار دهید، اما نباید در هر دو مدل باشد.

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'

اکنون، وقتی مدل پست را در پنل مدیریت مشاهده می کنید، می توانید چندین کسب و کار را به یک پست متصل کنید.

مدل پست دارای گزینه ای برای افزودن چندین کسب و کار است

جنگو ارتباطات پایگاه داده را ساده می کند

نوع پایگاه داده ای که برای برنامه خود استفاده می کنید نحوه استفاده از داده ها را تعیین می کند. جنگو دارای یک سیستم جامع است که اتصال و عملکرد پایگاه داده های رابطه ای را آسان می کند.

ویژگی های جنگو ذخیره و بازیابی داده ها از جداول مرتبط را آسان می کند. دارای APIهای داخلی است که به برنامه شما متصل شده و روابط پایگاه داده ایجاد می کند.

روابط پایگاه داده رفتار برنامه شما را تعیین می کند. اینکه آیا از روابط یک به یک، یک به چند یا چند به چند استفاده می کنید به شما بستگی دارد.

با Django، می‌توانید ویژگی‌ها را بدون شکستن برنامه خود پیکربندی و آزمایش کنید. از جنگو برای ایمن سازی سیستم های پایگاه داده و بهینه سازی تجربه توسعه دهنده خود استفاده کنید.