Django Forms - Handling User Input


Django forms are essential for handling user input in web applications. They allow you to create and process web forms, validate user data, and interact with databases. In this guide, we'll explore Django forms and how to handle user input.


Before you begin, make sure you have the following prerequisites in place:

  • Django: You should have Django installed. If not, use
    pip install django
    to install it.
  • Django Project: You should have a Django project set up. If not, refer to the guide on creating your first Django project.
  • URLs and Views: Ensure you have defined URL patterns and view functions or classes in your Django app. If not, refer to the guide on creating URLs and routing in Django.

Creating a Django Form

To create a Django form, you need to define a Python class that inherits from

and specify the form fields.

Sample Code

In your Django app, create a Python file (e.g.,
) and define a form class. For example:

from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)

Using Django Forms

Once you've defined a form, you can use it in your views to display the form to users and process their input.

Sample Code

In your view function in
, you can create an instance of the form, display it in a template, and process user input. For example:

from django.shortcuts import render
from .forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Process the form data
name = form.cleaned_data['name']
email = form.cleaned_data['email']
message = form.cleaned_data['message']
# Perform actions with the data (e.g., send an email)
form = ContactForm()
return render(request, 'contact.html', {'form': form})


Django forms provide a powerful way to handle user input in your web applications. By defining forms, displaying them in views, and processing user data, you can create interactive and data-driven web experiences.