آشنایی کامل با Class‑Based Views در جنگو: ساختار، کاربردها، مثال‌ها و پشتیبانی از متدهای HTTP و ویوهای ناهمگام

این مقاله یک معرفی جامع از ویوهای مبتنی بر کلاس در جنگو ارائه می‌دهد. موضوعاتی مانند ساختار پایهٔ CBVها، نحوه استفاده در URLconf، ارث‌بری و سفارشی‌سازی، پشتیبانی از متدهای HTTP مانند HEAD، و همچنین ویوهای ناهمگام (Async Views) بررسی می‌شود.

Class-Based Views، Django CBV، TemplateViewRedirectView، AsyncViewHEAD method، URLconf

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۲۳ اسفند ۱۴۰۴

مقدمه

در جنگو، یک ویو هر چیزی است که بتوان آن را فراخوانی کرد و در پاسخ به یک درخواست HTTP، یک پاسخ برگرداند. این ویو می‌تواند یک تابع باشد، اما جنگو امکان استفاده از کلاس‌ها به‌عنوان ویو را نیز فراهم می‌کند. ویوهای مبتنی بر کلاس (Class‑Based Views یا CBV) به شما اجازه می‌دهند کدهای قابل‌استفاده مجدد بنویسید و از قدرت ارث‌بری و میکسین‌ها بهره ببرید.


ویوهای پایه در جنگو

تمام ویوهای مبتنی بر کلاس از View ارث می‌برند. این کلاس وظیفهٔ dispatch کردن درخواست‌ها به متدهای مناسب (مثل get() یا post()) را بر عهده دارد.

چند ویوی پایهٔ مهم:

  • View: پایهٔ تمام CBVها
  • TemplateView: رندر کردن یک قالب
  • RedirectView: انجام ریدایرکت

استفاده از CBV در URLconf

ساده‌ترین روش استفاده از CBVها، فراخوانی مستقیم آن‌ها در URLconf است:


urlpatterns = [
    path("about/", TemplateView.as_view(template_name="about.html")),
]

هر آرگومانی که به as_view() بدهید، ویژگی‌های کلاس را override می‌کند.


ارث‌بری و سفارشی‌سازی ویوها

روش قدرتمندتر استفاده از CBVها، ساخت زیرکلاس و override کردن ویژگی‌ها یا متدهاست.

مثال: ساخت یک AboutView سفارشی


class AboutView(TemplateView):
    template_name = "about.html"

و سپس در URLconf:


path("about/", AboutView.as_view()),

پشتیبانی از متدهای HTTP

CBVها به‌صورت پیش‌فرض از متدهای HTTP مانند GET و POST پشتیبانی می‌کنند. اما می‌توانید متدهای دیگری مثل HEAD را نیز اضافه کنید.

مثال: افزودن HEAD برای بهینه‌سازی API


class BookListView(ListView):
    model = Book

    def head(self, *args, **kwargs):
        last_book = self.get_queryset().latest("publication_date")
        return HttpResponse(headers={
            "Last-Modified": last_book.publication_date.strftime(
                "%a, %d %b %Y %H:%M:%S GMT"
            )
        })

در این حالت:

  • GET → لیست کتاب‌ها را برمی‌گرداند
  • HEAD → فقط هدر Last‑Modified را برمی‌گرداند

ویوهای ناهمگام (Async Class‑Based Views)

جنگو از ویوهای ناهمگام پشتیبانی می‌کند. کافی است متدهای ویو را با async def تعریف کنید.

مثال: یک ویوی ناهمگام


class AsyncView(View):
    async def get(self, request, *args, **kwargs):
        await asyncio.sleep(1)
        return HttpResponse("Hello async world!")

نکتهٔ مهم:

  • تمام متدهای ویو باید یا همگی async باشند یا همگی sync
  • ترکیب def و async def باعث خطای ImproperlyConfigured می‌شود

مزایای استفاده از Class‑Based Views

  • کاهش تکرار کد
  • استفاده از ارث‌بری و میکسین‌ها
  • ساخت ویوهای قابل‌گسترش و قابل‌نگهداری
  • پشتیبانی از متدهای HTTP مختلف
  • امکان استفاده از async برای بهبود عملکرد

جمع‌بندی

ویوهای مبتنی بر کلاس در جنگو یک ابزار قدرتمند برای ساخت وب‌اپلیکیشن‌های تمیز، ساخت‌یافته و قابل‌نگهداری هستند. با استفاده از View، TemplateView، RedirectView و قابلیت‌هایی مانند پشتیبانی از HEAD و async، می‌توانید ویوهایی بسازید که هم انعطاف‌پذیر باشند و هم عملکرد بالایی داشته باشند.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

فریم‌ورک Tasks در Django: راهنمای کامل اجرای کارهای پس‌زمینه در Django 6.0

Django 6.0 فریم‌ورک Tasks را معرفی کرده است؛ سیستمی داخلی برای تعریف و صف‌بندی کارهای پس‌زمینه خارج از چرخهٔ request–response. این مقاله نحوهٔ کار Tasks، پیکربندی backendها، تعریف و enqueue کردن Taskها، استفاده از context، و ادغام با سیستم‌های Worker خارجی را توضیح می‌دهد.

ادامه

پشتیبانی Asynchronous در Django: راهنمای کامل Async Views، ORM، Middleware، عملکرد و ایمنی

این مقاله پشتیبانی Django از برنامه‌نویسی غیرهم‌زمان (async) را توضیح می‌دهد. موضوعاتی مانند async views، اجرای Django تحت ASGI، رفتار middleware، قابلیت‌های ORM غیرهم‌زمان، sync_to_async، مدیریت قطع اتصال، نکات عملکردی، و مکانیزم‌های ایمنی Django برای جلوگیری از استفادهٔ ناامن async بررسی می‌شوند.

ادامه

System Check Framework در Django: راهنمای کامل نوشتن، ثبت، اجرا و تست چک‌های سیستمی

System Check Framework در Django مجموعه‌ای از بررسی‌های استاتیک برای تشخیص مشکلات رایج در پروژه است. این مقاله نحوهٔ اجرای چک‌ها، نوشتن چک‌های سفارشی، مدیریت پیام‌ها، برچسب‌گذاری چک‌ها، افزودن چک به مدل‌ها و فیلدها، و نوشتن تست‌های واحد و یکپارچه برای چک‌ها را توضیح می‌دهد.

ادامه

سیگنال‌ها در Django: راهنمای کامل استفاده، اتصال، ارسال و مدیریت Signalها

این مقاله سیستم سیگنال‌های Django را توضیح می‌دهد؛ مکانیزمی برای اطلاع‌رسانی رویدادها بین بخش‌های مختلف برنامه بدون ایجاد وابستگی مستقیم. موضوعاتی مانند نحوهٔ اتصال receiverها، استفاده از decorator، مدیریت senderهای خاص، محل مناسب قرارگیری کد سیگنال‌ها، هشدارهای مهم، و بهترین شیوه‌ها بررسی می‌شوند.

ادامه

آشنایی کامل با Django Settings: پیکربندی، مدیریت محیط، و بهترین شیوه‌ها

این مقاله یک راهنمای جامع دربارهٔ سیستم تنظیمات در Django ارائه می‌دهد. موضوعاتی مانند ساختار فایل تنظیمات، نحوهٔ تعیین DJANGO_SETTINGS_MODULE، استفاده از settings در کد، امنیت، پیکربندی دستی با configure()، استفادهٔ مستقل از Django با django.setup() و ایجاد تنظیمات سفارشی بررسی می‌شوند.

ادامه

سریال‌سازی و دسریال‌سازی در Django: راهنمای کامل کار با Serialization Framework

این مقاله سیستم سریال‌سازی Django را توضیح می‌دهد؛ از نحوهٔ تبدیل مدل‌ها به JSON، XML، YAML و JSONL گرفته تا دسریال‌سازی داده‌ها، سریال‌سازی فیلدهای انتخابی، کار با مدل‌های ارث‌بری، مدیریت روابط، و نکات مهم هنگام ذخیرهٔ داده‌های دسریال‌شده.

ادامه