Автор оригинала: Max Ong Zong Bao.
Когда я только начал изучать Джанго. У меня всегда есть проблема выбора.
Какие представления я должен использовать, это либо представления на основе функций, либо представления на основе классов.
Я считаю, что это одна из основных причин, почему Django трудно подобрать для начинающих.
Поэтому я считаю, что эта статья может позволить вам понять основные функциональные возможности этих представлений.
Чтобы сделать выбор в вашей разработке, на котором необходимо основываться на ваших примерах использования.
Что такое Представления на основе функций (FBV)?
Представления на основе функций аналогичны тому, как вы создаете функцию в Python.
Разница вместо того, чтобы вызывать функцию напрямую.
Он принимает HTTP – запрос который называется request
in views.py
.
Он возвращает HTML ответ
на основе URL – адреса, указанного в urls.py для вызова функции.
Если бы вы только начали изучать Джанго.
Представления на основе функций-это первое представление, с которым вы познакомитесь в учебнике из Django Girls или Mozilla Developer Network или Django .
Как это Выглядит?
В самой простой форме представление на основе функций будет выглядеть следующим образом, которое возвращает ответ.
В fbv_1
функция a return
используется для возврата HTML-ответа.
В то время как for bfv_2
возвращает render
, который использует предварительно созданный дизайн шаблона под названием detail.html
для генерации HTML-ответа:
from django.http import HttpResponse, HttpResponseNotFound, Http404 from django.shortcuts import render from polls.models import Poll def fbv_1(requests): if requests: return HttpResponse('Page was found
') else: return HttpResponseNotFound('Page not found
') def fbv_2(request, poll_id): try: p = Poll.objects.get(pk=poll_id) except Poll.DoesNotExist: raise Http404("Poll does not exist") return render(request, 'polls/detail.html', {'poll': p})
Плюсы и минусы
Ниже приведены мои исследования и опыт работы с функциональными представлениями.
Плюсы
- Простота обучения
- Простота реализации
- Простота чтения благодаря прямолинейному характеру кодовой базы
Аферы
- Невозможно расширить или настроить на основе условия запроса
- Трудно повторно использовать код, который приводит к повторению кода в другом представлении.
Представления на основе классов были введены для решения проблемы негибкости , возможности повторного использования кода и простоты настройки для представлений.
Что такое представления на основе классов (CBV)?
Представления на основе классов (CBV) создаются по вышеуказанным причинам.
Он реализован для решения общих шаблонов, основанных на условиях запроса.
Вы можете думать о CBV как о подобном playbook .
Это используется для создания разнообразных или сложных представлений из условий запроса.
Этот playbook может быть основан на Классных классовых представлениях .
Чтобы предоставить вам лучшее понимание того, что реализовано в Django для CBV.
Как это Выглядит?
Самая простая форма CBV – это когда вы импортируете стандартный View
из django.views
для создания CBV.
В качестве основы для HTTP-запроса методы like GET
, POST
или DELETE
возвращают правильный ответ:
from django.views import View class CBV(View): def get(self, request): # Code block for GET request pass def post(self, request): # Code block for POST request pass
Для создания advance или complex версии CBV существует встроенный Generic Views , который адресует common behaviors
Другой-это Миксины , которые обеспечивают специфическую функциональность.
Для глубокого погружения в CBV перейдите к Django documentation | Classy Class-Based Views & Class-Based Views in Django для получения более подробной информации об этом.
Плюсы и минусы
Ниже приведены мои исследования и опыт работы с классовыми представлениями.
Плюсы
- Простота настройки за счет расширения класса
- База повторного использования кода на основе Объектно-ориентированного проектирования принципы
- Простота создания CBV due
playbook
стиль встроенногоMixin
&Generic Views
Аферы
- Требуется дополнительное исследование и тестирование правильных встроенных универсальных представлений и миксинов, если вам требуется продвинутый или сложный CBV.
- Труднее читать
- Поток кода не является четким и прямым из-за абстракции, что приводит к путанице для разработчиков.
Если вам требуется, чтобы представления были простыми, простыми в обслуживании, а ваша проблема требует простого решения без большой настройки pick FBV.
Если вы хотите, чтобы ваши представления были сложными , настраиваемыми и многоразовыми выберите CBV.
Обратите внимание, что в некоторых случаях для выбора вам нужно будет выбрать CBV.
Особенно если вы планируете создавать формы , аутентификацию .
Это также может быть связано с тем, что вы используете Django REST Framework для создания конечных точек.
Я очень надеюсь, что эта статья поможет вам лучше понять как FBV, так и CBV.
Так что это ускорит вашу кривую обучения реализации как FBV, так и CBV в Django.
Кроме того, я надеюсь, что он дает достаточно информации, чтобы позволить вам выбрать правильный вид для вашего варианта использования.
Наконец, существует несколько школ мысли о предпочтениях либо для BV, либо для BV.
Для меня это больше похоже на использование его в тех случаях использования, которые имеют смысл для вас.
Я считаю, что исследования и внедрение CBV могут принести вам пользу, если вам нужно что-то сделать быстро.
Если вам понравилась эта статья подпишитесь на мой Информационный бюллетень авантюриста для еженедельного обновления в области Python , Startup и Web Development .
Вы также можете следовать за мной, чтобы получить последнее обновление моей статьи о CodeMentor
Оригинальный пост был на Function-Based Views vs Class Based-Views in Django – Reading Time: 5 Mins and cover image by Photo by Dietmar Becker on Unsplash
- Нераскрытый
- Девушки Джанго
- Mozilla Developer Network
- Джанго
- Классные Представления На Основе Классов
- Методы HTTP-запросов
- Встроенные общие представления
- Представления на Основе Классов
- Представления на основе классов в Django
- Объектно-Ориентированный Дизайн
- Фреймворк Django REST
- Маркус: Представления на основе классов Django против представлений на основе Функций
- Краткий код: Представления на основе функций Django и представления на основе классов
- Простое лучше Сложного: Представления На Основе Классов и Представления На Основе Функций