سلام به کاربران محترم جنگو لرن، قسمت قبلی رو توی این لینک می تونید مطالعه کنید. در قسمت دوم آموزش Class-based Views در جنگو با ویوهای generic آشنا می شیم.
طراحی وب اپلیکیشن ها به خاطر تکراری بودن کارها بعضی اوقات خسته کننده میشه چون بعضی کارها در وب مشخص هستند.مثلا نمایش لیست آبجکت ها، یا نمایش جزئیات آبجکت و…. ویوهای جنریک جنگو راه حل این مشکل هستند.
توسعه دهندگان جنگو برای این کارهای تکراری ویوهای کلاس بیسی ساختن که اسمشون رو built-in class-based generic views گذاشتن. همه این کلاس هارو ما از django.views.generic ایمپورت می کنیم.
برای اینکه لیست همه جنریک کلاس هارو بتونیم ببینیم میتونیم از shell استفاده کنیم. دستورات زیر رو اجرا کنید:
import django.views.generic
dir(django.views.generic)
یا میتونیم توی pycharm کلیک راست روی جنریک کنیم و همه کلاس های جنریک رو ببینیم. همونطوری که مشخصه کلاس هایی برای ساخت رکورد جدید یا insert، ویرایش یا update، حذف یا delete ارائه کردن.
برای نمایش لیست رکورد ها و جزئیاتش یا همون detail هم کلاس ایجاد کردن. برای کار با فرم ها FormView رو ساختن.
و یه سری کلاس های دیگه هم ساختن، که بر حسب زمان و تاریخ اطلاعات رو نمایش میدن. یعنی تاریخ یا زمان یکی از آرگومان های ورودی شون هست و برحسب این تاریخ یا زمان دیتارو نمایش میدن.
در قسمت قبلی دیدم که فقط با مشخص کردن مدل میتونیم یک ویو رو بسازیم.
با استفاده از جنریک ویوها حتی میتونیم بدون ساختن ویوی جدید توی view.py لیست کاربرهارو نمایش بدیم . برای این کار وارد urls.py میشیم و کد زیر رو اضافه می کنیم:
path("user-list3/", generic.ListView().as_view(model=User))
حالا خروجی رو رفرش می کنیم. می بینیم که همه چی نمایش داده میشه.
ایجا حتی میتونیم اسم context رو عوض کنیم. با استفاده از context_object_name و باید تغییراتی در فایل html ایجاد کنیم. البته این تغییرات رو می تونیم توی کلاس ویو خودمون انجام بدیم.
پس یه کلاس ویو جدید می سازیم و context_object_name رو تنظیم می کنیم تا از مقدار پیشفرض استفاده نکنه.
این اتریبیوت یه class attribute از کلاس MultipleObjectMixin هست. که از کلاس های parent لیست ویو هست.
یک نکته در مورد آرگومان های ورودی as_view اینکه، فقط آرگومان هایی رو قبول میکنه که جزء لیست attribute های کلاس باشن.
برای مثال این آرگومان هایی که وارد کردیم در کلاس پدر ویو ما بود. به خاطر همین به عنوان ورودی قبولشون می کرد. ولی اگه یه آرگومان با امضای اشتباه وارد کنیم، خطا میده.
در قسمت بعدی با کلاس View و کلاس TemplateView خیلی دقیق آشنا میشیم.
ویدئوی این قسمت رو می تونید از دانشجویار (این لینک) دانلود کنید.