نحوه انجام عملیات CRUD با مدل های جنگو
جنگو یک ابزار فوق العاده مفید برای ساخت برنامه های تحت وب با پایتون است. از معماری Model-View-Template (MVT) پیروی می کند که یک الگوی طراحی محبوب برای ساخت برنامه های وب است.
در معماری MVT، مدل به نمایش داخلی اطلاعات ذخیره شده اشاره دارد، View مسئول پردازش درخواست های کاربر و بازگرداندن پاسخ های مناسب است، و Template مسئول ارائه داده های دریافت شده از View است.
این راهنما بر روی بخش Model از معماری تمرکز می کند، که جزء اصلی برنامه شما است و معمولاً هنگام طراحی برنامه های خود از آنجا شروع می کنید. مدل مسئول نمایش داخلی داده های شما است و یک رابط برای تعامل مستقیم با پایگاه داده ارائه می دهد.
در این آموزش یاد خواهید گرفت که چگونه از پوسته تعاملی جنگو برای ایجاد، خواندن، به روز رسانی و حذف اشیاء استفاده کنید. همچنین با ثبت مدل ها در رابط مدیریت آشنا خواهید شد که برای طراحی پایگاه داده های سازمان یافته برای پروژه های جنگو شما مفید است.
این مهارت ها به شما این امکان را می دهد که پروژه های خود را به طور کارآمدتری مدیریت کنید و اطمینان حاصل کنید که آنها به خوبی کار می کنند.
پیش نیازها
برای استفاده حداکثری از این آموزش، باید درک اولیه ای از Python و Django داشته باشید.
نحوه راه اندازی پروژه
برای کمک به درک مفاهیم موجود در این آموزش، یک برنامه ساده "todo" توسعه خواهید داد.
برای شروع، یک دایرکتوری جدید ایجاد کنید که در آن پروژه را میزبانی کنید، سپس دایرکتوری ها را در آن تغییر دهید.
پس از ورود به پوشه، virtualenv
را نصب کنید، ابزاری برای ایجاد محیط های ایزوله پایتون.
pip install virtualenv virtualenv venv source venv/bin/activate
pip install virtualenv
ابزار لازم را نصب می کند. virtualenv venv
یک محیط مجازی به نام venv ایجاد می کند. در نهایت، source venv/bin/activate
محیط مجازی را فعال میکند و امکان توسعه ایزوله پایتون را در محیط تعیینشده فراهم میکند.
به راحتی می توانید نامی را که در حین ایجاد محیط مجازی انتخاب کرده اید جایگزین "venv" کنید.
مطمئن شوید که جنگو نصب شده است. اگر نه، آن را از طریق خط فرمان مانند زیر نصب کنید:
pip install django
با استفاده از دستور زیر یک پروژه را شروع کنید:
django-admin startproject todoproject
به فهرست پروژه تغییر دهید، todoproject
، سپس یک برنامه جدید ایجاد کنید.
cd todoproject python manage.py startapp todoapp
سپس، نام برنامه را در فهرست INSTALLED_APPS
در settings.py
قرار دهید. در ویرایشگر کد خود، به فایل settings.py
بروید.
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'todoapp' # new app ]
مدل های جنگو
یک مدل مانند کارشناس پیشرو برای همه داده های شما در جنگو است. این مانند یک طرح دقیق است که می گوید چه اطلاعاتی را می خواهید ذخیره کنید، چگونه آنها را ذخیره کنید و چگونه می توان آنها را بازیابی کرد.
برنامه todo وظایف را ذخیره می کند. فقط با ذخیره عنوان کاری که باید انجام شود و وضعیت تکمیل آن - یعنی اینکه آیا کار انجام شده است یا نه، آن را ساده نگه خواهید داشت. فایل models.py
را در ویرایشگر متن خود باز کنید و کد زیر را اضافه کنید:
from django.db import models class Task(models.Model): title = models.CharField(max_length=100) completed = models.BooleanField(default=False)
در این مدل فوق العاده ساده:
Task
نام مدل است.
title
یک فیلد از نوع CharField
با حداکثر طول 100 کاراکتر است. این قسمت برای ذخیره متن کوتاه مناسب است.
completed
فیلدی از نوع BooleanField
با مقدار پیش فرض False
است. این فیلد یک بولی (درست/نادرست) است. مقدار پیشفرض روی False
تنظیم میشود، با این فرض که کارها به صورت پیشفرض تکمیل نشده باشند.
بخش اصلی یک مدل فهرست چیزهایی است که ذخیره می کند (به نام فیلدها). title
و completed
فیلدهایی هستند که از انواع فیلدهای BooleanField
و CharField
هستند.
نمونه های دیگری از انواع فیلدهایی که می توانید استفاده کنید عبارتند از:
AutoField
: یک IntegerField
که به طور خودکار افزایش می یابد.
BooleanField
: مقادیر true/false را نشان می دهد.
CharField
: مقادیر مبتنی بر متن را ذخیره می کند.
DateField
: یک تاریخ را با استفاده از یک نمونه datetime.date
نشان می دهد.
DateTimeField
: تاریخ و زمان را با استفاده از نمونه datetime.datetime
نشان می دهد.
DecimalField
: یک عدد اعشاری با دقت ثابت را با استفاده از یک نمونه Decimal
نشان می دهد.
EmailField
: یک CharField
که ارزش را به عنوان یک آدرس ایمیل معتبر تأیید می کند.
ImageField
: از FileField
به ارث می برد و اطمینان حاصل می کند که اشیاء آپلود شده تصاویر معتبر هستند.
IntegerField
: مقادیر صحیح را در یک محدوده امن ذخیره می کند.
SlugField
: نشان دهنده یک برچسب کوتاه برای چیزی است که معمولاً در URL ها استفاده می شود.
TextField
: یک فیلد متنی بزرگ.
TimeField
: زمان را با استفاده از یک نمونه datetime.time
نشان می دهد.
URLField
: یک CharField
برای URL ها.
انواع فیلدهای دیگر رابطه بین جداول را توضیح می دهند:
ForeignKey
: نشان دهنده یک رابطه چند به یک است.
ManyToManyField
: نشان دهنده یک رابطه چند به چند است.
OneToOneField
: نشان دهنده یک رابطه یک به یک است. اساساً شبیه یک ForeignKey
با unique=True
است، اما سمت «معکوس» رابطه مستقیماً یک شی واحد را به دست میدهد.
برای همگام سازی پایگاه داده خود با آخرین تغییرات مدل های جنگو، باید مهاجرت ها را اجرا کنید. مطمئن شوید که در همان دایرکتوری فایل manage.py
هستید و سپس موارد زیر را اجرا کنید:
python manage.py makemigrations python manage.py migrate
مدل های خود را در فایل admin.py
ثبت کنید. این به مدیران امکان میدهد تا نمونههای مدل Task
را از طریق رابط مدیریت جنگو مشاهده، اضافه، ویرایش و حذف کنند. این یک راه راحت برای تعامل با داده های شما در طول توسعه و آزمایش است.
#admin.py from django.contrib import admin from .models import Task # Register your models here. admin.site.register(Task)
برای دسترسی به رابط مدیریت جنگو باید یک superuser
ایجاد کنید. در ترمینال، موارد زیر را اجرا کنید:
python manage.py createsuperuser
دستورات را دنبال کنید و باید یک حساب کاربری فوقالعاده برای دسترسی به رابط مدیریت داشته باشید.
پوسته جنگو
شما معمولاً منطق خود را در یک view می نویسید، اما چون قصد داریم آزمایش های بیشتری انجام دهیم، از پوسته جنگو استفاده خواهید کرد. این یک ابزار قدرتمند و همه کاره است که تجربه توسعه و آزمایش پروژه های جنگو شما را افزایش می دهد. پوسته همچنین یک محیط پویا و تعاملی برای کار با کد، داده ها و مدل های شما فراهم می کند.
برای دسترسی به پوسته، دستور زیر را از پوشه پروژه اجرا کنید:
python manage.py shell
با وارد کردن مدل Task شروع کنید.
عملیات اساسی که بر روی یک مدل انجام می شود معمولاً ایجاد، خواندن، به روز رسانی و حذف است - از این رو برنامه CRUD نامیده می شود. در اینجا نحوه انجام هر چهار عملیات را یاد خواهید گرفت.
ايجاد كردن
برای ایجاد یک کار جدید، موارد زیر را در پوسته خود تایپ کنید:
>>> new_task = Task(title='Complete Assignment', completed=False) >>> new_task.save()
همچنین می توانید از تابع create
مانند زیر استفاده کنید:
Task.objects.create(title='Another Task', completed=False)
برای تحلیل تمام وظایف، موارد زیر را وارد کنید:
Task.objects.all()
شما باید چیزی شبیه به آنچه در تصویر زیر می بینید دریافت کنید. توجه داشته باشید که یک مجموعه کوئری با وظیفه ای که شما ایجاد کرده اید برگردانده می شود:
بیشتر بخوانید
خواندن
هنگامی که اشیاء را ایجاد کردید، باید بتوانید آنها را بخوانید. برای انجام این کار، جنگو متدهای get()
و filter()
را ارائه می کند.
متد get()
یک شی واحد را از پایگاه داده بر اساس شرایط مشخص شده بازیابی می کند. در صورتی که هیچ شی یا چندین شی پیدا نشود، استثناهایی را ایجاد می کند و آن را برای پرس و جوهای منحصر به فرد مناسب می کند.
متد filter()
مجموعه پرس و جو از اشیاء پایگاه داده را بازیابی می کند که با شرایط مشخص مطابقت دارند. در صورت یافتن چندین یا هیچ شیء استثنایی ایجاد نمی کند و پس برای پرس و جوهایی با چندین نتیجه ممکن ایده آل است.
می توانید از متد get()
برای بازیابی کار با عنوان خاصی استفاده کنید.
specific_task = Task.objects.get(title='Complete Assignment') print(f'Title: {specific_task.title}, Completed: {specific_task.completed}')
خروجی کد بالا به صورت زیر است:
شما همچنین می توانید یک کار را در صورت داشتن شرایط خاص بازیابی کنید. اینجاست که روش فیلتر می درخشد.
فرض کنید میخواهید کارهای ناقص را دریافت کنید، یعنی کارهایی که فیلد completed
روی False
تنظیم شده است. می توانید این کد را اضافه کنید:
incomplete_tasks = Task.objects.filter(completed=False) for task in incomplete_tasks: print(f'Title: {task.title}, Completed: {task.completed}')
با این کار تمام کارهایی که تکمیل نشده اند را برمی گرداند.
این روش برای بازیابی چندین شیء بر اساس شرایط خاص ایده آل است.
به روز رسانی
اگر می خواهید تغییراتی ایجاد کنید، می توانید این کار را با استفاده از متد update()
انجام دهید. فرض کنید تمام کارها را انجام داده اید و اکنون می خواهید آنها را به عنوان انجام شده علامت گذاری کنید. این کد برای آن است:
incomplete_tasks = Task.objects.filter(completed=False) incomplete_tasks.update(completed=True) all_tasks = Task.objects.all() for task in all_tasks: print(f'Title: {task.title}, Completed: {task.completed}')
خروجی کد بالا به صورت زیر است:
این ابتدا وضعیت کارهای completed
را به روز می کند، سپس کارهای تکمیل شده را چاپ می کند.
حذف
بعد از همه چیز، ممکن است بخواهید همه وظایف یا یک کار خاص را حذف کنید. شما می توانید این کار را با استفاده از متد delete()
مانند زیر انجام دهید:
task_to_delete = Task.objects.get(title='Another Task') task_to_delete.delete() all_tasks_after_deletion = Task.objects.all() for task in all_tasks_after_deletion: print(f'Title: {task.title}, Completed: {task.completed}')
کد بالا با استفاده از روش get
، وظیفه ای را با عنوان «یک کار دیگر» دریافت می کند و سپس با استفاده از روش delete
، آن را حذف می کند. در نهایت، جزئیات تمام کارهای باقی مانده را چاپ می کند تا تأیید کند که حذف با موفقیت انجام شده است.
خروجی این است:
همچنین می توانید کد بالا را به این صورت ساده کنید:
task_to_delete = Task.objects.get(title='Another Task').delete() all_tasks_after_deletion = Task.objects.all() for task in all_tasks_after_deletion: print(f'Title: {task.title}, Completed: {task.completed}')
شما می توانید به تمام وظایفی که در پنل مدیریت جنگو ایجاد کرده اید دسترسی داشته باشید. سرور را در ترمینال به صورت زیر راه اندازی کنید:
python manage.py runserver
سپس در مرورگر خود، از سایت http://127.0.0.1:8000/admin/
دیدن کنید و اعتبار سوپرکاربری را که قبلا ایجاد کرده اید وارد کنید. در آنجا می توانید به تمام وظایفی که ایجاد کرده اید دسترسی داشته باشید.
ما کار دیگر را حذف کردیم، پس کار باقیمانده همانگونه که در بالا نشان داده شده است، کار "تکمیل تکلیف" است.
نتیجه
در این آموزش، شما نمونه های عملی ایجاد، خواندن، به روز رسانی و حذف اشیاء را تحلیل کردید و مهارت خود را در استفاده از پوسته تعاملی جنگو افزایش دادید.
همچنین با اهمیت ثبت مدل ها در رابط مدیریت برای مدیریت آسان در حین توسعه آشنا شدید.
با این دانش، شما اکنون مجهز به طراحی پایگاههای داده قوی و سازماندهی شدهاید و از عملکرد روان پروژههای جنگو خود اطمینان میدهید. قابلیت های جنگو را کاوش کنید و خلاقیت خود را در ساختن برنامه های کاربردی وب پویا و تعاملی آزاد کنید.
کد نویسی مبارک
ارسال نظر