
روز ۱۴: تعریف Model و مهاجرت دیتابیس در جنگو
در جنگو، مدلها (Models) قلب پروژه محسوب میشوند و هرگونه دادهای که قرار است در پایگاه داده ذخیره شود، ابتدا باید توسط مدل تعریف شود. مدلها کلاسهایی در پایتون هستند که نماینده جدولهای پایگاه دادهاند و فیلدهای آنها ستونهای جدول را مشخص میکنند. تعریف مدلها به صورت اصولی باعث میشود دادهها به صورت ساختاریافته و استاندارد ذخیره شوند و مدیریت پایگاه داده بدون نیاز به نوشتن SQL خام انجام شود. در این روز از دوره جنگو، تمرکز ما روی تعریف مدلها، استفاده از فیلدهای مختلف و آشنایی با فرآیند مهاجرت پایگاه داده با دستورات makemigrations و migrate است تا پروژه آماده ذخیره و مدیریت دادهها شود.
ایجاد مدل در جنگو
برای ایجاد مدل، ابتدا به فایل models.py در اپلیکیشن موردنظر میرویم و یک کلاس پایتونی تعریف میکنیم که از کلاس models.Model ارثبری میکند. سپس فیلدهای موردنظر را اضافه میکنیم. فیلدها میتوانند انواع مختلفی داشته باشند مانند CharField، TextField، DateTimeField و غیره. این فیلدها ویژگیهای ستون جدول را مشخص میکنند، مانند طول، پیشفرض و امکان خالی بودن.
from django.db import models
class Student(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
date_joined = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.first_name} {self.last_name}"در این مثال، کلاس Student نماینده جدول دانشآموزان است و هر فیلد مشخصکننده نوع داده و محدودیتهای آن ستون است. متد __str__ باعث میشود که نمایش شیء در پنل مدیریت یا در هنگام چاپ آن خوانا و معنادار باشد.
فرآیند مهاجرت در جنگو
پس از تعریف مدل، باید آن را به پایگاه داده منتقل کنیم. این فرآیند شامل دو مرحله اصلی است: ایجاد فایل مهاجرت با دستور makemigrations و اعمال تغییرات به پایگاه داده با دستور migrate. فایلهای مهاجرت شامل تغییرات ایجاد شده در مدلها هستند و جنگو با استفاده از آنها جدولهای پایگاه داده را ایجاد یا تغییر میدهد. این فرآیند باعث میشود همواره هماهنگی بین مدلها و پایگاه داده حفظ شود و تغییرات به راحتی مدیریت شوند.
python manage.py makemigrations python manage.py migrate
دستور اول فایلهای مهاجرت را ایجاد میکند و دستور دوم تغییرات را روی پایگاه داده اعمال میکند. این روش استاندارد جنگو برای مدیریت ساختار پایگاه داده است و جایگزین مستقیم SQL در پروژهها محسوب میشود.
افزودن تغییرات بعدی به مدل
یکی از مزایای استفاده از مهاجرت این است که حتی بعد از ایجاد مدل، میتوان تغییراتی در آن ایجاد کرد و با اجرای مجدد makemigrations و migrate تغییرات را به پایگاه داده منتقل کرد. این ویژگی باعث میشود پروژه انعطافپذیر باقی بماند و نیازی به بازنویسی پایگاه داده یا حذف جدولها نباشد. همچنین این فرآیند به توسعهدهندگان امکان میدهد در محیط تیمی تغییرات مدلها را بدون تداخل مدیریت کنند.
# اضافه کردن فیلد جدید به مدل
class Student(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
phone_number = models.CharField(max_length=15, blank=True, null=True) # فیلد جدید
date_joined = models.DateTimeField(auto_now_add=True)
پس از اضافه کردن فیلد جدید، کافی است مجدداً دستورات مهاجرت اجرا شوند تا جدول پایگاه داده بهروزرسانی شود.
استفاده از پنل مدیریت برای مشاهده دادهها
جنگو به صورت پیشفرض پنل مدیریتی قدرتمندی ارائه میدهد که امکان مشاهده و مدیریت دادهها را بدون نیاز به نوشتن کوئری فراهم میکند. برای دسترسی به مدلها در پنل مدیریت، کافی است مدل را در فایل admin.py ثبت کنیم. این کار باعث میشود بتوانیم رکوردها را اضافه، ویرایش یا حذف کنیم و عملکرد پروژه را به صورت بصری بررسی نماییم.
from django.contrib import admin from .models import Student admin.site.register(Student)
پس از ثبت مدل در admin، میتوان از طریق آدرس /admin به پنل مدیریت دسترسی پیدا کرد و دادهها را مشاهده کرد. این ویژگی برای پروژههای واقعی بسیار حیاتی است.
مزایای استفاده از مدل و مهاجرت
استفاده از مدلها و فرآیند مهاجرت مزایای زیادی دارد، از جمله استانداردسازی ساختار دادهها، کاهش خطاهای SQL، امکان تغییر و توسعه آسان و هماهنگی کامل بین کد و پایگاه داده. همچنین این روش باعث میشود تیمهای توسعه بتوانند به راحتی روی پروژه کار کنند و تغییرات را بدون ایجاد مشکل اعمال کنند. رعایت این اصول پایهایترین بخش هر پروژه حرفهای جنگو است.
جمعبندی روز چهاردهم
در روز چهاردهم، یاد گرفتیم چگونه مدلها را تعریف کنیم، فیلدهای مختلف را به آنها اضافه کنیم، و با دستورات makemigrations و migrate تغییرات را به پایگاه داده منتقل کنیم. همچنین نحوه افزودن فیلد جدید و استفاده از پنل مدیریت را بررسی کردیم. تسلط بر مدلها و فرآیند مهاجرت باعث میشود پروژههای جنگو شما ساختاریافته، قابل توسعه و استاندارد باقی بمانند و پایه قوی برای انجام عملیات CRUD و ایجاد صفحات داینامیک فراهم شود.