Django Class-Based Views (CBVs)

Working with class-based views in Django:

In Django you define views as subclasses of the off-the-shelf view classes supplied with Django framework. These classes deal with HTTP methods(GET, POST, etc. ) and this is where you put the related logic for working with request and returning response.

                                
# views.py

from django.views import View
from django.http import HttpResponse

class MyView(View):
    def get(self, request):
        return HttpResponse("This is a GET request.")

    def post(self, request):
        return HttpResponse("This is a POST request.")
                                
                            

In this example, MyView is a class-based view that defines methods for handling GET and POST requests.

Understanding generic class-based views:

Django provides a set of generic class-based views that cover common patterns, such as displaying lists of objects, displaying detail views for objects, and handling form submissions.

                                
# views.py

from django.views.generic import ListView
from .models import MyModel

class MyListView(ListView):
    model = MyModel
    template_name = 'myapp/my_model_list.html'
    context_object_name = 'my_model_list'

                                
                            

In this example, MyListView is a generic class-based view that displays a list of objects from the MyModel model.

Creating custom class-based views:

Another option would be looking at the class-based views created by Django generic views for some inspiration, or making completely new views to fit the needs of the application.

                                
# views.py

from django.views.generic import TemplateView

class MyCustomView(TemplateView):
    template_name = 'myapp/my_template.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # Add custom context data here
        return context

                                
                            

Here, MyCustomView stands for a class-based custom view layout that includes its own template and adds custom data to this template.