Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Form Validation in Django

Introduction

Form validation is a crucial aspect of web development. It ensures that the data submitted by users is clean, correct, and meets the required criteria. Django, a popular web framework, provides powerful tools for form handling and validation. In this tutorial, we will explore how to implement form validation in Django from start to finish.

Creating a Django Form

First, let's create a Django form using the forms.Form class. This class allows us to define the fields and their validation rules.

Example: Creating a Simple Form

from django import forms

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

In this example, we have created a ContactForm with three fields: name, email, and message. The email field uses EmailField, which automatically validates email addresses.

Adding Custom Validation

Django allows us to add custom validation to our forms by defining clean_<fieldname> methods. These methods can be used to perform additional validation on specific fields.

Example: Adding Custom Validation

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_name(self):
        name = self.cleaned_data.get('name')
        if " " not in name:
            raise forms.ValidationError("Please enter your full name.")
        return name
                

In this example, we have added a custom validation method clean_name that checks if the name field contains a space (indicating a full name). If not, a validation error is raised.

Validating Multiple Fields Together

Sometimes, we need to validate multiple fields together. We can achieve this by overriding the clean method of the form.

Example: Validating Multiple Fields

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(self):
        cleaned_data = super().clean()
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')

        if "example.com" in email:
            raise forms.ValidationError("We do not accept emails from example.com")
        return cleaned_data
                

In this example, the clean method checks if the email address contains "example.com". If it does, a validation error is raised.

Displaying Form Errors

When a form is submitted and contains errors, Django will automatically populate the form with error messages. To display these errors in your template, you can loop through the form's errors.

Example: Displaying Form Errors


{% csrf_token %} {{ form.as_p }} {% if form.errors %}
    {% for field in form %} {% for error in field.errors %}
  • {{ field.label }}: {{ error }}
  • {% endfor %} {% endfor %} {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
{% endif %}

In this example, we loop through the form's fields and display any errors associated with those fields. We also check for non-field errors and display them.

Conclusion

Form validation is an essential part of web development, ensuring that user input is valid and clean. Django provides a robust form handling and validation system that makes it easy to create and validate forms. By following this tutorial, you should have a solid understanding of how to implement form validation in Django.