سایت خبرکاو

جستجوگر هوشمند اخبار و مطالب فناوری

نحوه انجام عملیات CRUD با مدل های جنگو

جنگو یک ابزار فوق العاده مفید برای ساخت برنامه های تحت وب با پایتون است. از معماری Model-View-Template (MVT) پیروی می کند که یک الگوی طراحی محبوب برای ساخت برنامه های وب است. در معماری MVT، مدل به نمایش داخلی اطلاعات ذخیره شده اشاره دارد، View مسئول پردازش درخواست های کاربر و بازگرداندن پاسخ های مناسب است، و Template مسئول ارائه داده های دریافت شده از View است. این راهنما بر روی بخش Model از معماری تمرکز می کند، ...

جنگو یک ابزار فوق العاده مفید برای ساخت برنامه های تحت وب با پایتون است. از معماری 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 
اسکرین شات-از-2024-01-12-14-48-39
انجام مهاجرت ها

مدل های خود را در فایل 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
اسکرین شات-از-2024-01-12-14-52-19
ایجاد یک ابر کاربر

دستورات را دنبال کنید و باید یک حساب کاربری فوق‌العاده برای دسترسی به رابط مدیریت داشته باشید.

پوسته جنگو

شما معمولاً منطق خود را در یک view می نویسید، اما چون قصد داریم آزمایش های بیشتری انجام دهیم، از پوسته جنگو استفاده خواهید کرد. این یک ابزار قدرتمند و همه کاره است که تجربه توسعه و آزمایش پروژه های جنگو شما را افزایش می دهد. پوسته همچنین یک محیط پویا و تعاملی برای کار با کد، داده ها و مدل های شما فراهم می کند.

برای دسترسی به پوسته، دستور زیر را از پوشه پروژه اجرا کنید:

 python manage.py shell

با وارد کردن مدل Task شروع کنید.

اسکرین شات-از-2024-01-12-15-15-57
وارد کردن مدل به پوسته جنگو

عملیات اساسی که بر روی یک مدل انجام می شود معمولاً ایجاد، خواندن، به روز رسانی و حذف است - از این رو برنامه CRUD نامیده می شود. در اینجا نحوه انجام هر چهار عملیات را یاد خواهید گرفت.

ايجاد كردن

برای ایجاد یک کار جدید، موارد زیر را در پوسته خود تایپ کنید:

 >>> new_task = Task(title='Complete Assignment', completed=False) >>> new_task.save()

همچنین می توانید از تابع create مانند زیر استفاده کنید:

 Task.objects.create(title='Another Task', completed=False)

برای تحلیل تمام وظایف، موارد زیر را وارد کنید:

 Task.objects.all()

شما باید چیزی شبیه به آنچه در تصویر زیر می بینید دریافت کنید. توجه داشته باشید که یک مجموعه کوئری با وظیفه ای که شما ایجاد کرده اید برگردانده می شود:

اسکرین شات-از-2024-01-15-12-32-55
ایجاد اشیاء در پوسته جنگو

خواندن

هنگامی که اشیاء را ایجاد کردید، باید بتوانید آنها را بخوانید. برای انجام این کار، جنگو متدهای get() و filter() را ارائه می کند.

متد get() یک شی واحد را از پایگاه داده بر اساس شرایط مشخص شده بازیابی می کند. در صورتی که هیچ شی یا چندین شی پیدا نشود، استثناهایی را ایجاد می کند و آن را برای پرس و جوهای منحصر به فرد مناسب می کند.

متد filter() مجموعه پرس و جو از اشیاء پایگاه داده را بازیابی می کند که با شرایط مشخص مطابقت دارند. در صورت یافتن چندین یا هیچ شیء استثنایی ایجاد نمی کند و پس برای پرس و جوهایی با چندین نتیجه ممکن ایده آل است.

می توانید از متد get() برای بازیابی کار با عنوان خاصی استفاده کنید.

 specific_task = Task.objects.get(title='Complete Assignment') print(f'Title: {specific_task.title}, Completed: {specific_task.completed}')

خروجی کد بالا به صورت زیر است:

اسکرین شات-از-2024-01-15-13-59-07
بازیابی یک شی خاص در پوسته جنگو

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

فرض کنید می‌خواهید کارهای ناقص را دریافت کنید، یعنی کارهایی که فیلد completed روی False تنظیم شده است. می توانید این کد را اضافه کنید:

 incomplete_tasks = Task.objects.filter(completed=False) for task in incomplete_tasks: print(f'Title: {task.title}, Completed: {task.completed}')

با این کار تمام کارهایی که تکمیل نشده اند را برمی گرداند.

اسکرین شات-از-2024-01-15-14-02-44-1
بازیابی اشیایی که شرایط خاصی را در پوسته جنگو دارند

این روش برای بازیابی چندین شیء بر اساس شرایط خاص ایده آل است.

به روز رسانی

اگر می خواهید تغییراتی ایجاد کنید، می توانید این کار را با استفاده از متد 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}')

خروجی کد بالا به صورت زیر است:

اسکرین شات-از-2024-01-15-14-37-07-1
به روز رسانی اشیاء در پوسته جنگو

این ابتدا وضعیت کارهای 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 ، آن را حذف می کند. در نهایت، جزئیات تمام کارهای باقی مانده را چاپ می کند تا تأیید کند که حذف با موفقیت انجام شده است.

خروجی این است:

اسکرین شات-از-2024-01-15-14-53-40
حذف اشیاء در پوسته جنگو

همچنین می توانید کد بالا را به این صورت ساده کنید:

 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/ دیدن کنید و اعتبار سوپرکاربری را که قبلا ایجاد کرده اید وارد کنید. در آنجا می توانید به تمام وظایفی که ایجاد کرده اید دسترسی داشته باشید.

اسکرین شات-از-2024-01-15-14-59-40
رابط مدیریت جنگو

ما کار دیگر را حذف کردیم، پس کار باقیمانده همانگونه که در بالا نشان داده شده است، کار "تکمیل تکلیف" است.

نتیجه

در این آموزش، شما نمونه های عملی ایجاد، خواندن، به روز رسانی و حذف اشیاء را تحلیل کردید و مهارت خود را در استفاده از پوسته تعاملی جنگو افزایش دادید.

همچنین با اهمیت ثبت مدل ها در رابط مدیریت برای مدیریت آسان در حین توسعه آشنا شدید.

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

کد نویسی مبارک

خبرکاو