FormView – Class Based Views Django

FormView refers to a view (logic) to display and verify a Django Form. For example a form to register users at geeksforgeeks. Class-based views provide an alternative way to implement views as Python objects instead of functions. They do not replace function-based views, but have certain differences and advantages when compared to function-based views:

  • Organization of code related to specific HTTP methods (GET, POST, etc.) can be addressed by separate methods instead of conditional branching.
  • Object oriented techniques such as mixins (multiple inheritance) can be used to factor code into reusable components.

Class based views are simpler and efficient to manage than function-based views. A function based view with tons of lines of code can be converted into a class based views with few lines only. This is where Object Oriented Programming comes into impact.

Django FormView – Class Based Views

Illustration of How to create and use FormView using an Example. Consider a project named geeksforgeeks having an app named geeks.

Refer to the following articles to check how to create a project and an app in Django.

After you have a project and an app, let’s create a form of which we will be creating FormView. In geeks/forms.py,



filter_none

edit
close

play_arrow

link
brightness_4
code

from django import forms
  
# creating a form
class GeeksForm(forms.Form):
    # specify fields for model
    title = forms.CharField()
    description = forms.CharField(widget = forms.Textarea)

chevron_right


After creating the form let’s create FormView. in geeks/views.py,

filter_none

edit
close

play_arrow

link
brightness_4
code

# import generic FormView
from django.views.generic.edit import FormView
  
# Relative import of GeeksForm
from .forms import GeeksForm
  
class GeeksFormView(FormView):
    # specify the Form you want to use
    form_class = GeeksForm
      
    # sepcify name of template
    template_name = "geeks / geeksmodel_form.html"
  
    # can specify success url
    # url to redirect after successfully
    # updating details
    success_url ="/thanks/"

chevron_right


Create a template for this view in geeks/geeksmodel_form.html,

filter_none

edit
close

play_arrow

link
brightness_4
code

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

chevron_right


Map a url to this view in geeks/urls.py,

filter_none

edit
close

play_arrow

link
brightness_4
code

from django.urls import path
  
# importing views from views..py
from .views import GeeksFormView
urlpatterns = [
    path('', GeeksFormView.as_view()),
]

chevron_right


Now visit http://127.0.0.1:8000/,
django-create-view-function-based

Validate Form Data in Form View

Class Based Views provide in built functions for validating data in form. In geeks/views.py,

filter_none

edit
close

play_arrow

link
brightness_4
code

# import generic FormView
from django.views.generic.edit import FormView
  
# Relative import of GeeksForm
from .forms import GeeksForm
  
class GeeksFormView(FormView):
    # specify the Form you want to use
    form_class = GeeksForm
      
    # sepcify name of template
    template_name = "geeks / geeksmodel_form.html"
  
    # can specify success url
    # url to redirect after successfully
    # updating details
    success_url ="/thanks/"
  
    def form_valid(self, form):
        # This method is called when valid form data has been POSTed.
        # It should return an HttpResponse.
          
        # perform a action here
        print(form.cleaned_data)
        return super().form_valid(form)

chevron_right


One can perform desired functionality in form_valid function. In our case, it prints the data. Lets’ try entering data in the form and check if it is working.
django-formview-class-based-view
Check in terminal if details have been printed.
django-formview-terminal




My Personal Notes arrow_drop_up

Software Developer at GeeksForGeeks

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : aasutossh, nidhi_biet

Article Tags :

1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.