Django's class-based views are a perfect example of well-written OO python.
A view takes a request, gets some data, and renders a response.
Each part of the process (and its subparts) is abstracted in methods that can be overridden. This lets you implement certain things (authentication, formatting, compression, caching, logging, pagination) once in an abstract class or mixin, and add it to all your views.
Of course, Django already has those classes and mixins.
This means you can write very simple views. Just define the queryset and the template, and you're done. Everything else just works, because it's already implemented in well-tested parent classes.
A view takes a request, gets some data, and renders a response.
Each part of the process (and its subparts) is abstracted in methods that can be overridden. This lets you implement certain things (authentication, formatting, compression, caching, logging, pagination) once in an abstract class or mixin, and add it to all your views.
Of course, Django already has those classes and mixins.
This means you can write very simple views. Just define the queryset and the template, and you're done. Everything else just works, because it's already implemented in well-tested parent classes.