@WebDeveloper2016

Как понять CBV и GV?

Ну никак до меня не доходит... Хотя вроде я понял что CBV это тупо аналог обычных views объявляемых через функцию с вызовом render. А тут классом. Но не понимаю во первых в чем преимущество такого объявления? Кода больше выходит, а преимуществ не вижу... Да еще не понятно в чем разница между всякими этими generic.ListView, generic.DetailView и пр. Кажется одна фигня... Или все таки есть какая то разница? Еще какой-то TemplateView, который вообще можно юзать не прописывая производный класс...

П.С. Еще интересует тема вот таких форм. Тоже никак не врублюсь как их юзать... Они что генерируют html код? Или что?
  • Вопрос задан
  • 314 просмотров
Пригласить эксперта
Ответы на вопрос 2
Разница появляется тогда, когда количество view становится сколь-нибудь значительным. В своих проектах мы используем почти исключительно CBV и стараемся уйти от функций-view как можно дальше. Посмотрите на библиотеку: https://github.com/brack3t/django-braces

Предположим, что у вас 30 разных view, и из них 10 должны быть доступны только суперпользователю, 15 - только зарегистрированным пользователям с разными permissions, а 5 - анонимусам и ботам. Чтобы это сделать на FBV, надо будет в каждой функции писать проверку заново или делать какие-то специальные функции типа check_superuser(), которые в случае неуспеха выбрасывают 403. Но согласитесь, что это некрасиво. То ли дело с CBV:

class ReactorCreateView(PermissionRequiredMixin, CreateView):
    permission = 'myapp.create_reactor'
    model = AtomicReactor


и собственно всё. Вы можете легко поменять одно на другое.

Если у вас этих view вообще сотни по системе, то может оказаться, что в доброй половине используются одни и те же шаблоны, уровни доступа, дефолтные фильтры на queryset, и поэтому вы можете создавать свои собственные mixin и использовать их во многих view сразу.

Так что CBV - это дико полезная вещь; советую вам сразу только ими и пользоваться, чтоб потом не было мучительно больно переписывать разросшуюся груду процедурной лапши.
Ответ написан
sim3x
@sim3x
Разжевывать зачем каждый класс в CBV никто не будет - почитай мануал, почитай код
Если не понимаешь - пиши вью функциями

В общем случае, CBV лучше подходят, когда в проекте ничего нет и нужно получить работоспособный скелет сайта. Редактирование, добавление, удаление в три строки - ето удобно

Функциями писать проще, с точки зрения начинающего программера
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы