Django 27.1 Представления на основе классов
В этом посте разберёмся, в чём разница между функциональными и классовыми представлениями в Django.
Реклама
В предыдущих постах я рассказывал о представлениях на основе функций, они же function-based views
или FBV
.
Подход писать функциональные представления хорош на начальном этапе. Он даёт понимание работы представлений.
Однако в последствии, код представлений будет усложняться и разрастаться, что может сделать их трудно читаемыми и перегруженными. Также, в большинстве гайдов, материалов и документациях примеры даются на классовых представлениях.
Классовые представления.
Классовые представления, они же class-based views
или CBV
. Представляют собой альтернативный подход к созданию представлений. Они основаны на использовании классов вместо функций, что позволяет лучше структурировать код и повысить его переиспользование.
Классовые представления в Django обеспечивают ряд преимуществ по сравнению с функциональными представлениями. Они позволяют использовать принципы ООП, такие, как наследование и полиморфизм, что делает код более организованным и поддерживаемым.
Классы-представления могут быть очень гибкими и настраиваемыми. Можно определить свои собственные классы-представления, которые наследуются от базовых классов и расширяют их функциональность в соответствии с требованиями проекта. Это позволяет сократить дублирование кода, упростить его поддержку и улучшить его читабельность.
При использовании классов-представлений можно определить методы, такие как get()
, post()
, которые обрабатывают соответствующие типы запросов. В функциональном представлении это повлекло бы за собой цепочку if-elif
условий для обработки нужного типа запроса в представлении.
Различия между функциональными и классовыми представлениями:
- Структура кода: В функциональных представлениях код разбит на функции, которые выполняют определенные действия. В классовых представлениях код организован в виде классов, которые содержат методы для обработки запросов.
- Наследование: В классовых представлениях можно использовать наследование, что позволяет переиспользовать код и добавлять новую функциональность. В функциональных представлениях такая возможность отсутствует.
- Расширяемость: Классовые представления позволяют легко добавлять новые методы и функциональность без изменения основного кода. В функциональных представлениях это может быть сложнее.
- Миксины: Классовые представления поддерживают использование миксинов, представляющие собой классы с определенными методами, которые можно добавить к основному классу представления для расширения его функциональности.
- Читаемость кода: Классовые представления могут быть более читаемыми и понятными, особенно для разработчиков, знакомых с объектно-ориентированным программированием.
Встроенные классы представлений.
Django предоставляет различные классы представлений, которые можно использовать для упрощения разработки.
Вот некоторые из них:
View
: Это самый базовый класс представления в Django. Он обрабатывает связывание представления с URL, диспетчеризацию методов HTTP и другие общие функции. Все другие классы представлений Django наследуются от этого класса.TemplateView
: Этот класс представления используется, когда вам нужно просто отобразить страницу, которая не требует никакой дополнительной логики. Он автоматически рендерит указанный шаблон.ListView
: Это класс представления, который используется для отображения списка объектов. Он автоматически предоставляет контекст для шаблона, который содержит список объектов.DetailView
: Этот класс представления используется для отображения деталей конкретного объекта. Он автоматически предоставляет контекст для шаблона, который содержит объект.CreateView
,UpdateView
,DeleteView
: Эти классы представлений используются для создания, обновления и удаления объектов соответственно. Они автоматически предоставляют форму для ввода данных и обрабатывают POST-запросы для создания, обновления или удаления объектов.FormView
: Этот класс представления используется для отображения и обработки форм. Он автоматически предоставляет форму для ввода данных и обрабатывает POST-запросы.RedirectView
: Этот класс представления используется для перенаправления на другой URL.DateDetailView
,YearArchiveView
,MonthArchiveView
,DayArchiveView
,TodayArchiveView
: Эти классы представлений предназначены для отображения архивов объектов, отсортированных по датам.
Все эти классы представлений отличаются друг от друга своими функциями и способами применения. Они позволяют упростить и ускорить процесс разработки, предоставляя готовые решения для распространенных задач.
Теории много, но без неё было никак. В следующей части начнём переделывать представления из функциональных в классовые.
Все статьи