The basic concept doesn't make a big difference. The real meat is the generic model views, not the base CBV, imo.
It may not be revolutionary, but extending an UpdateView to block anonymous users and throwing a mixin that limit access to the objects the current user owns, I can have my "edit a blog post" view looking like:
class EditBlogPost(OwnedObjectsMixin, AuthenticatedUpdateView):
model = Blog
form = BlogForm
and all I have left to do is put my template, which is quite nice (especially when the List, Create, Delete views are about the same length in code).
It gets less useful (and more convoluted) as your views get further away from basic CRUD stuff, but I still feel it's quite useful.
(Edited: the difference is more clear on the "Update" view)
The decorator can only add behavior prior to the original function's execution, and many decorators may not necessarily be applied together. CBVs allow a composition of mixins that can include behavior that's substantially more complicated and can deal with any of the methods and members defined for the view.
A well-defined base CBV allows you to limit the use of RequestContexts, checks for method types, and special validations. For small projects it may not make a difference; for projects with at least couple dozen views and a bunch of common behavior, they increase readability tremendously.
Also, they offer a very good template for defining view behavior. Once you're familiarized with CBV method definitions it's much easier to grok code, as the view flow is much more standardized than for regular function views.
It may not be revolutionary, but extending an UpdateView to block anonymous users and throwing a mixin that limit access to the objects the current user owns, I can have my "edit a blog post" view looking like:
and all I have left to do is put my template, which is quite nice (especially when the List, Create, Delete views are about the same length in code).It gets less useful (and more convoluted) as your views get further away from basic CRUD stuff, but I still feel it's quite useful.
(Edited: the difference is more clear on the "Update" view)