Представления на основе класса
Я всегда использую FBV (Function Based Views) при создании приложения django, потому что он очень прост в обращении. Но большинство разработчиков заявили, что лучше использовать CBVs (Class Based Views) и использовать только FBV, если это сложные представления, которые могут быть больны для реализации с CBV.
Почему? В чем преимущества использования CBV?
Ответы
Ответ 1
Единственным существенным преимуществом является наследование. По большому проекту, вероятно, у вас будет много похожих взглядов. Вместо того, чтобы писать один и тот же код снова и снова, вы можете просто наследовать свои представления из базового представления.
Также django поставляется с коллекцией общих классов классов, которые могут использоваться для выполнения некоторых из наиболее распространенных задач. Например, класс DetailView используется для передачи одного объекта с одной из ваших моделей, визуализации его с помощью шаблона и возврата ответа HTTP. Вы можете подключить его прямо к своему URL-адресу.
url(r'^author/(?P<pk>\d+)/$', DetailView.as_view(model=Author)),
Или вы можете расширить его с помощью специальных функций
class SpecialDetailView(DetailView):
model = Author
def get_context_data(self, *args, **kwargs):
context = super(SpecialDetailView, self).get_context_data(*args, **kwargs)
context['books'] = Book.objects.filter(popular=True)
return context
Теперь вашему шаблону будет передан набор объектов книги для рендеринга.
Хорошим местом для начала является хорошее чтение docs.
Обновление
ccbv.co.uk содержит исчерпывающую и удобную информацию о просмотренных классах, которые у вас уже есть.
Ответ 2
НЕКОТОРЫЕ СЛОВА ИЗ ДВУХ СЦЕПОВ
Совет Альтернативный Apporach - Пребывание с FBV
Некоторые разработчики предпочитают ошибаться на стороне использования FBV для большинства просмотров и CBV только для представлений, которые необходимо подклассифицировать. Эта стратегия также прекрасна.
Ответ 3
Когда я начал с DJango, я никогда не использовал CBV из-за их кривой обучения и немного сложной структуры. Быстрая перемотка вперед в течение двух лет, я использую FBV только в нескольких местах. Где я уверен, что код будет очень простым и будет оставаться простым.
Основное преимущество CBV и множественного наследования, которое приходит вместе с ними, заключается в том, что я могу полностью избежать написания сигналов, вспомогательных методов и копирования кода вставки. Особенно в тех случаях, когда приложение выполняет гораздо больше, чем обычные операции CRUD. Представления с множественным наследованием в несколько раз легче отлаживать код с помощью сигналов и вспомогательных методов, особенно если это неизвестная база кода.
Помимо CBV с множественным наследованием, предоставляют различные методы для диспетчеризации, получения шаблонов, обработки разных типов запросов, передачи переменных контекста шаблона, проверки форм и многое другое из коробки. Они делают код модульным и, следовательно, поддерживаемым.
Ответ 4
Представления, основанные на классах, превосходны, если вы хотите реализовать полнофункциональные операции CRUD в приложении Django, и для реализации с использованием представлений, основанных на функциях, потребуется мало времени и усилий.
Я порекомендую вам использовать представления, основанные на функциях, когда вы не собираетесь внедрять какие-либо CRUD на свой сайт/приложение, означает, что ваше намерение - просто визуализировать шаблон.
Я создал простое приложение CRUD, использующее представления на основе классов, которые являются живыми. Посетите http://filtron.pythonanywhere.com/view/ и наслаждайтесь. Тогда вы узнаете его важность.
Ответ 5
Некоторые представления лучше всего реализованы как CBV, а другие лучше всего реализованы как FBV.
Если вы не уверены, какой метод выбрать, см. Следующую таблицу:
![enter image description here]()