• Информация на сайте предоставляется «как есть», может содержать неточности и не является консультацией или офертой.
  • Перед использованием проконсультируйтесь со специалистом.

Используя сайт, вы подтверждаете, что вы изучили и согласны с документами Политика конфиденциальности и обработки персональных данныхи Пользовательское соглашение.

Сайт использует cookies для работы и сбора аналитики. Вы можете принять или настроить их, а также полностью отключить в настройках браузера.

Настройки cookies
Необходимые для работы веб-сайта

Используются для входа, навигации и защиты (например: sessionid, csrftoken). Без них сайт может работать с перебоями.

Помогают улучшить сайт, собирая статистику посещений (например, через Яндекс Метрику).

Используются для показа персонализированной рекламы и ретаргетинга в рекламных сетях.

Настройки интерфейса

Декоративный эффект свечения при клике по странице.

DEV -
PROGRAM.RU
Контакты

Django CBV: что такое Class-Based Views и зачем они

Разбираемся, что такое CBV в Django и зачем они нужны. Преимущества, наследование и миксины простыми словами, с примерами кода.

В статье обзоре мы познакомились с Django, а так же рассмотрели Views - Представления на простом примере с использованием функций.

Так как часто сайты имеют схожий повторяющийся функционал, программисты придумали CBV - Class-Based Views.

Что такое class-based views (cbv) в django?

Class-Based Views (CBV) это способ написания Views - Представлений, используя классы, с минимальным количеством кода, так как большинство сценариев предусмотрено через атрибуты и готовые методы (функции).

Стоит отметить, что Функциональные представления Function-Based Views (FBV) предпочтительней, когда требуется какое то нестандартное решение.

Почему стоит использовать cbv?

Class-Based Views стоит использовать из-за возможности наследования и переиспользования логики.

Что такое наследование cbv в django?

Под наследованием подразумевается возможность описать логику 1 раз и переиспользовать ее в дочерних классах автоматически.

Изменения которые получил родительский класс, автоматически распространяются на классы наследники, это удобно в больших проектах.

python
class BaseArticleView(TemplateView):
    template_name = "news/article.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["category"] = self.get_category()
        return context

    def get_category(self):
        raise NotImplementedError

class NewsArticleView(BaseArticleView):
    def get_category(self):
        return "news"


class BlogArticleView(BaseArticleView):
    def get_category(self):
        return "blog"

Пример наследования BaseArticleView

В примере выше NewsArticleView и BlogArticleView получают имя шаблона (template_name) родителя BaseArticleView, а так же ошибку в случае отсутствия у них get_category и наследуют get_context_data.

Что такое переиспользование логики в cbv у django?

Переиспользование логики это добавление небольших классов mixin - миксинов, которые отвечают за узкий функционал в классе представления VIew, ситуации для примера:

  • проверка прав доступа

  • добавление данных в контекст ответа

  • запись логов или уведомление на внешний сервис

class LoginRequiredMixin:
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return redirect("login")
        return super().dispatch(request, *args, **kwargs)


class MyView(LoginRequiredMixin, ListView):
    model = Article

Пример миксина LoginRequiredMixin

Как выбрать между наследованием и миксинами?

Требуется использовать наследование, когда у базового класса есть много логики, которая требуется и дочерним классам.

Выбор в пользу миксина требуется сделать тогда, когда речь идет об одном конкретном функционале, который может применяться к разным узким типам классов представлений View внутри проекта.

На примере кулинарии, наследование это допустим база в качестве хлебной лепешки, дочерними элементами будут пицца и хачапури.

Миксин же, это добавление масла или лука, то есть действие которое может применяться и к блюдам других типов.

В продолжение знакомства с Django и CBV, вы можете прочесть так же:

Если у вас остались вопросы по Class-Based Views или Django вы можете обратиться за консультацией к программисту.

Вам может быть интересно

Поделиться
Ничего не найдено
Найдите нужную страницу

Статьи, инструменты и помощь