از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش انجام عملیات CRUD با مدل های جنگو
سرفصلهای مطلب
جنگو یک ابزار فوق العاده مفید برای ساخت برنامه های تحت وب با پایتون است. از معماری Model-View-Template (MVT) پیروی می کند که یک الگوی طراحی محبوب برای ساخت برنامه های وب است.
در معماری MVT، مدل به نمایش داخلی اطلاعات ذخیره شده اشاره دارد، View مسئول پردازش درخواست های کاربر و بازگرداندن پاسخ های مناسب است، و Template مسئول ارائه داده های دریافت شده از View است.
این راهنما تمرکز دارد روی بخش مدل معماری، که جزء اصلی برنامه شماست و معمولاً هنگام طراحی برنامه های خود از آنجا شروع می کنید. مدل مسئول نمایش داخلی داده های شما است و یک رابط برای تعامل مستقیم با پایگاه داده ارائه می دهد.
در این آموزش یاد خواهید گرفت که چگونه از پوسته تعاملی جنگو برای ایجاد، خواندن، به روز رسانی و حذف اشیاء استفاده کنید. همچنین با ثبت مدل ها در رابط مدیریت آشنا خواهید شد که برای طراحی پایگاه داده های سازمان یافته برای پروژه های جنگو شما مفید است.
این مهارت ها به شما این امکان را می دهد که پروژه های خود را به طور کارآمدتری مدیریت کنید و اطمینان حاصل کنید که آنها به خوبی کار می کنند.
پیش نیازها
برای استفاده حداکثری از این آموزش، باید درک اولیه ای از Python و Django داشته باشید.
روش راه اندازی پروژه
برای کمک به درک مفاهیم موجود در این آموزش، یک برنامه ساده “todo” توسعه خواهید داد.
برای شروع، یک دایرکتوری جدید در جایی که می خواهید ایجاد کنید host پروژه، سپس دایرکتوری ها را به آن تغییر دهید.
پس از ورود به پوشه، نصب کنید 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
: یک تاریخ را با استفاده از a نشان می دهدdatetime.date
نمونه، مثال.DateTimeField
: تاریخ و زمان را با استفاده از a نشان می دهدdatetime.datetime
نمونه، مثال.DecimalField
: یک عدد اعشاری با دقت ثابت را با استفاده از a نشان می دهدDecimal
نمونه، مثال.EmailField
: آCharField
اعتبارسنجی مقدار به عنوان یک آدرس ایمیل معتبرImageField
: ارث می برد ازFileField
، اطمینان حاصل شود که اشیاء آپلود شده تصاویر معتبر هستند.IntegerField
: مقادیر صحیح را در یک محدوده امن ذخیره می کند.SlugField
: نشان دهنده یک برچسب کوتاه برای چیزی است که معمولاً در URL ها استفاده می شود.TextField
: یک فیلد متنی بزرگTimeField
: نشان دهنده زمان با استفاده از a است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)
شما باید a ایجاد کنید superuser
به منظور دسترسی به رابط مدیریت جنگو. در terminal، موارد زیر را اجرا کنید:
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}')
شما می توانید به تمام وظایفی که در پنل مدیریت جنگو ایجاد کرده اید دسترسی داشته باشید. سرور را در terminal به شرح زیر است:
python manage.py runserver
سپس روی مرورگر خود، به سایت مراجعه کنید http://127.0.0.1:8000/admin/
و اعتبار سوپرکاربری که قبلا ایجاد کرده اید را وارد کنید. در آنجا می توانید به تمام وظایفی که ایجاد کرده اید دسترسی داشته باشید.
ما کار دیگر را حذف کردیم، بنابراین کار باقیمانده همانگونه که در بالا نشان داده شده است، کار “تکمیل تکلیف” است.
نتیجه
در این آموزش، شما نمونه های عملی ایجاد، خواندن، به روز رسانی و حذف اشیاء را بررسی کردید و مهارت خود را در استفاده از پوسته تعاملی جنگو افزایش دادید.
همچنین با اهمیت ثبت مدل ها در رابط مدیریت برای مدیریت آسان در حین توسعه آشنا شدید.
با این دانش، شما اکنون مجهز به طراحی پایگاههای داده قوی و سازماندهی شدهاید و از عملکرد روان پروژههای جنگو خود اطمینان میدهید. قابلیت های جنگو را کاوش کنید و خلاقیت خود را در ساختن برنامه های کاربردی وب پویا و تعاملی آزاد کنید.
کد نویسی مبارک
منتشر شده در 1403-01-18 22:35:08