Как понять CBV и GV?
Разница появляется тогда, когда количество 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 - это дико полезная вещь; советую вам сразу только ими и пользоваться, чтоб потом не было мучительно больно переписывать разросшуюся груду процедурной лапши.
Разжевывать зачем каждый класс в CBV никто не будет - почитай мануал, почитай код
Если не понимаешь - пиши вью функциями
В общем случае, CBV лучше подходят, когда в проекте ничего нет и нужно получить работоспособный скелет сайта. Редактирование, добавление, удаление в три строки - ето удобно
Функциями писать проще, с точки зрения начинающего программера