Рубрики
Без рубрики

Представления на основе функций и представления на основе классов в Django

Подробное руководство по сравнению различий между представлениями на основе функций и представлениями на основе классов для Django 3

Автор оригинала: Max Ong Zong Bao.

структура содержимого undraw 79gj

Когда я только начал изучать Джанго. У меня всегда есть проблема выбора.

Какие представления я должен использовать, это либо представления на основе функций, либо представления на основе классов.

Я считаю, что это одна из основных причин, почему Django трудно подобрать для начинающих.

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

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

undraw аннотация 7das

Что такое Представления на основе функций (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})

Плюсы и минусы

Ниже приведены мои исследования и опыт работы с функциональными представлениями.

Плюсы

  • Простота обучения
  • Простота реализации
  • Простота чтения благодаря прямолинейному характеру кодовой базы

Аферы

  • Невозможно расширить или настроить на основе условия запроса
  • Трудно повторно использовать код, который приводит к повторению кода в другом представлении.
undraw личное дело 222m

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

Что такое представления на основе классов (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.
  • Труднее читать
  • Поток кода не является четким и прямым из-за абстракции, что приводит к путанице для разработчиков.
undraw dev productivity umsq

Если вам требуется, чтобы представления были простыми, простыми в обслуживании, а ваша проблема требует простого решения без большой настройки pick FBV.

Если вы хотите, чтобы ваши представления были сложными , настраиваемыми и многоразовыми выберите CBV.

Обратите внимание, что в некоторых случаях для выбора вам нужно будет выбрать CBV.

Особенно если вы планируете создавать формы , аутентификацию .

Это также может быть связано с тем, что вы используете Django REST Framework для создания конечных точек.

Я очень надеюсь, что эта статья поможет вам лучше понять как FBV, так и CBV.

undraw snap the moment oyn6

Так что это ускорит вашу кривую обучения реализации как 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