Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

FormView – Class Based Views Django

  • Last Updated : 20 Jul, 2021

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, 
 

Python3




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

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

Python3




# 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
     
    # specify name of template
    template_name = "geeks / geeksmodel_form.html"
 
    # can specify success url
    # url to redirect after successfully
    # updating details
    success_url ="/thanks/"

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

html




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

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

Python3




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

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, 
 

Python3




# 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
     
    # specify 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)

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
Recommended Articles
Page :

Start Your Coding Journey Now!