Home / Blogs

How to Validate Forms With Django in 2023


August 8, 2023


Data validation plays a pivotal role in web development, serving as a vital component to verify user-submitted information for adherence to specified criteria before further processing. This imperative practice guarantees the integrity, accuracy, and reliability of the data, promoting a plagiarism-free environment. Django, the popular Python web framework, provides a robust and flexible form validation system. In this blog post, we will explore the various techniques and features Django offers for form validation, along with practical examples to illustrate their usage.

To read more about the key features of Django model forms, refer to our blog Key Features of Django Model Forms in 2023

1. Understanding Form Validation in Django:

Django’s form validation process involves two stages: client-side validation and server-side validation. Client-side validation is performed using JavaScript to provide immediate feedback to users, while server-side validation occurs on the server to ensure data integrity and security.

2. Built-in Form Validation:

Django provides a range of built-in form validation features that simplify the validation process. Let’s look at some commonly used techniques:

a. Field Validation:

Django offers numerous field-specific validators that can be applied to form fields. These validators include built-in options such as required, max_length, min_length, email, URL, and more. Developers can also define custom validators to suit specific validation requirements.

b. Form-level Validation:

In addition to field validation, Django allows for form-level validation, where multiple fields are evaluated together. By implementing the clean() method in a form, developers can perform complex validation logic that involves multiple fields.

c. Error Messages:

Django automatically generates error messages for validation failures, making it easy to display meaningful feedback to users. Error messages can be customized and rendered in templates using Django’s form rendering system.

3. The clean() and clean_<field_name>() Methods:

The clean() method and clean_<field_name>() methods are powerful tools provided by Django for form validation. By implementing these methods in a form class, developers can perform custom validation logic at both the form level and individual field level, respectively.

Here’s an example that demonstrates the usage of the clean() method and clean_<field_name>() methods:

from django import forms

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

    def clean_message(self):
        message = self.cleaned_data['message']
        if 'spam' in message:
            raise forms.ValidationError("Your message contains spam words.")
        return message

    def clean(self):
        cleaned_data = super().clean()
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')

        # Custom form-level validation logic
        if name and email:
            if not name.isalpha() or not email.endswith('@example.com'):
                raise forms.ValidationError("Invalid name or email.")

In the above example, we define a ContactForm class with fields like name, email, and message. We implement the clean_message() method to perform validation on the message field, checking if it contains spam words. Additionally, the clean() method performs form-level validation, ensuring that the name field contains only alphabetic characters and the email field ends with @example.com.

4. Rendering the Form and Displaying Validation Errors:

To render the form in a template and display validation errors, we can use Django’s form rendering system. Here’s an example template (contact.html) that renders the form and displays validation errors:

<form method="POST" action="{% url 'contact' %}">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Send Message</button>

In the above template code, we use the form.as_p template tag to render the form fields as paragraphs. If there are validation errors, Django will automatically associate error messages with the corresponding fields and display them in the template.

Handling Form Submission and Validating Data:

To handle form submission and validate the data, we need to define a view function. Here’s an example view (contact_view) that handles form submission and data validation:

from django.shortcuts import render, redirect
from .forms import ContactForm

def contact_view(request):
    form = ContactForm()
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # Process form data and send the message
            return redirect('success')    
    return render(request, 'contact.html', {'form': form})

To read more about mastering Django forms, refer to our blog Mastering Django Forms: Simplify & Streamline Your Web Application Development


Form validation is vital in web development to ensure data integrity and a smooth user experience. Django simplifies the form validation process by offering a range of built-in validation features and the flexibility to perform custom validation logic. By leveraging Django’s form validation system, developers can easily implement robust and secure form handling in their Django web applications. Remember to consult the Django documentation for more in-depth information on form validation and explore the various validation options available. With Django’s powerful form validation capabilities, you can build user-friendly and reliable web applications.

Horilla Editorial Team Author

Horilla Editorial Team is a group of experienced writers and editors who are passionate about HR software. We have a deep understanding of the HR landscape and are committed to providing our readers with the most up-to-date and informative content. We have written extensively on a variety of HR software topics, including applicant tracking systems, performance management software, and payroll software etc. We are always looking for new ways to share our knowledge with the HR community. If you have a question about HR software, please don't hesitate to contact us.