How to Create and Use FormView in Django?

Published On: 23/09/2022 | Category: Django

Hi Dev,

In this quick example, let's see how to use formview in django. if you have question about django formview example then I will give simple example with solution. it's simple example of how to create and use formview in django with example. I explained simply about django formview class based views example.

So, in this example, FormView refers to a view just be a template. to define a template_name and success_url in your form view.

let's see bellow example here you will learn how to use formview in django.

Step 1: Create a Project

In this step, we’ll create a new django project using the django-admin. Head back to your command-line interface and run the following command:

django-admin startproject example

Step 2: Create a App

Now we'll create a single app called core to store a list of post names. We're keeping things intentionally basic. Stop the local server with Control+c and use the startapp command to create this new app.

python3 startapp core

Step 3: Update

Next, then update INSTALLED_APPS within our file to notify Django about the app.

Next, you need to add it in the file as follows:


Step 4: Create a Form

In this step We need to create a form that will be used .like add a bootstrap class and validation etc.. plus we need to add custom styling.

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(widget=forms.TextInput(attrs={
        'placeholder': 'Enter Name',
        'class': 'form-control'
    message = forms.CharField(widget=forms.Textarea(attrs={
        'placeholder': 'Enter Message',
        'class': 'form-control'

    def send_email(self):
        # send email using the self.cleaned_data dictionary

Step 5: Creating the Views

In this step, we need to configure our views. The ContactView page will template and define a form class, open the file and add:

from django.shortcuts import render
from django.views.generic.edit import FormView

class ContactView(FormView):
    template_name = 'core/contact_us.html'
    form_class = ContactForm
    success_url = '/thanks/'

    def form_valid(self, form):
        return super(ContactView, self).form_valid(form)

Step 6: Creating the Template

Next, then with your text editor create new templates files: core/contact_us.html file and the add:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <link rel="stylesheet" href="[email protected]/dist/css/bootstrap.min.css">
    <style type="text/css">
            background-color: #f7fcff;
    <div class="container mt-5">
        <div class="row d-flex justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">
                        <h4>How to use FormView in Django? - <span class="text-primary"></span></h4>
                    <div class="card-body">
                        <form action="" method="post">
                            {% csrf_token %}
                            {{ form.as_p }}
                            <button class="btn btn-success" type="submit">Submit</button>

Step 7: Creating URLs

In this section, we need a file within the core app however Django doesn't create one for us with the startapp command. Create core/ with your text editor and within this file we'll import yet-to-be-created function for each--ContactView Note as well that we set an optional URL name for each.

Here's what it looks like:

from django.urls import path
from .views import ContactView

urlpatterns = [
    path('contact/', ContactView.as_view()),

Next, we require to add a URL path for our example app which can be done by importing include and setting a path for it.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('', include('core.urls')),

Run the Server

In this step, we’ll run the local development server for playing with our app without deploying it to the web.

python runserver

Next, go to the http://localhost:8000/contact address with a web browser.

I Hope It will help you....

Happy Pythonic Coding!