Class-Based View

سلام

یک CBV، ویویی است که یک کلاس ویو را توسعه می دهد. تفاوت اصلی در آن است که درخواست ها و requestهایی که درون کلاس نیاز به پردازش دارند به صورت جداگانه و بسته به متدهای http شامل get, post, put, head,… می شوند. به تعبیر دیگر اول چک می کنیم که متد http از نوع get, post, put, head,… بوده است یا خیر و سپس تابع مربوط به آن را پیمایش و پیاده سازی می کنیم.

views.py

from django.views.generic import View

class NewPostView(View):
    def post(self, request):
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('post_list')
        return render(request, 'new_post.html', {'form': form})

    def get(self, request):
        form = PostForm()
        return render(request, 'new_post.html', {'form': form})

ضمناً روش ارجاع دهی به CBVها در ماژول urls.py کمی متفاوت است.

urls.py

urlpatterns = [
    url(r'^new_post/$', views.NewPostView.as_view(), name='new_post'),
]

در قطعه کد بالا باید از متد ()as_view در انتها استفاده شود. این متد تابع view را براساس الگوهای url باز می گرداند. در موارد خاص امکان استفاده از متد ()as_view  با آرگومان های ورودی هم وجود دارد که این کار با هدف شخصی سازی رفتار CBV انجام می شود. درست مانند کاری که در فصل های قبلی در خصوص ویوهای اعتبارسنجی و برای شخصی سازی قالب ها انجام دادیم.

نکتۀ جالب در خصوص CBVها، امکان اضافه کردن متدهای بیشتر است. مثلاً:

from django.views.generic import View

class NewPostView(View):
    def render(self, request):
        return render(request, 'new_post.html', {'form': self.form})

    def post(self, request):
        self.form = PostForm(request.POST)
        if self.form.is_valid():
            self.form.save()
            return redirect('post_list')
        return self.render(request)

    def get(self, request):
        self.form = PostForm()
        return self.render(request)

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: Generic Class-Based View

مطلب قبلی: Function-Based View

بدون دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
پیکربندی گواهینامۀ https

سلام حالا می خواهیم برنامۀ خودمان را با گواهینامۀ https امن کنیم. ساده ترین کار برای انجام آن Let’s Encrypt است. قبل از Let’s Encrypt هرگز تنظیمات https به این راحتی نبوده و مهمتر اینکه اینکار کاملاً رایگان است. آن ها راه حلی به نام certbot را ارائه داده اند …

جنگو
پیکربندی سرویس ایمیل

سلام یکی از بهتر سرویس دهنده های ایمیل Mailgun با قابلیت ۱۲ هزار ایمیل رایگان در ماه است. به صورت رایگان ثبت نام کنید. برای اینکار باید آن را با سرویس دهندۀ دامین خود تنظیم کنید که در این آموزش از tamadon.org استفاده شده است. حالا اولین رکورد DNS را …

جنگو
پیکربندی NGINX

سلام کار بعدی که قرار است انجام شود؛ تنظیمان Nginx به شکلی است که پاسخگویی و سرویس دهی مربوط به فایل های استاتیک را خود انجام دهد و سایر درخواست ها را به Gunicorn بفرستد. یک فایل پیکربندی با نام boards را درون /etc/nginx/sites-available/ و با محتوای زیر اضافه می …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.