FileExtensionValidator – Validate File Extensions in Django

Django's FileExtensionValidator is a built-in validator that ensures uploaded files have specific extensions. This validator helps maintain security and data integrity by preventing unwanted file types from being uploaded to your application.

What is FileExtensionValidator?

The FileExtensionValidator allows you to specify which file extensions are allowed or forbidden for FileField and ImageField uploads. It's particularly useful for controlling file types in forms and preventing security vulnerabilities.

Basic Usage

Here's how to use FileExtensionValidator in your Django models ?

from django.db import models
from django.core.validators import FileExtensionValidator

class Document(models.Model):
    # Allow only PDF files
    pdf_file = models.FileField(
        upload_to='documents/',
        validators=[FileExtensionValidator(allowed_extensions=['pdf'])]
    )
    
    # Allow multiple image formats
    image_file = models.FileField(
        upload_to='images/',
        validators=[FileExtensionValidator(allowed_extensions=['jpg', 'jpeg', 'png', 'gif'])]
    )

Complete File Upload Example

Let's create a complete example with model, form, and view ?

models.py

from django.db import models
from django.core.validators import FileExtensionValidator

class UploadedFile(models.Model):
    name = models.CharField(max_length=100)
    document = models.FileField(
        upload_to='uploads/',
        validators=[FileExtensionValidator(allowed_extensions=['pdf', 'docx', 'txt'])]
    )
    uploaded_at = models.DateTimeField(auto_now_add=True)
    
    def __str__(self):
        return self.name

forms.py

from django import forms
from .models import UploadedFile

class FileUploadForm(forms.ModelForm):
    class Meta:
        model = UploadedFile
        fields = ['name', 'document']
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'document': forms.FileInput(attrs={'class': 'form-control'})
        }

views.py

from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import FileUploadForm

def upload_file(request):
    if request.method == 'POST':
        form = FileUploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request, 'File uploaded successfully!')
            return redirect('upload_file')
        else:
            messages.error(request, 'Please correct the errors below.')
    else:
        form = FileUploadForm()
    
    return render(request, 'upload.html', {'form': form})

Validation Parameters

The FileExtensionValidator accepts several parameters ?

Parameter Description Example
allowed_extensions List of allowed file extensions ['pdf', 'docx']
message Custom error message 'Only PDF files allowed'
code Error code for validation 'invalid_extension'

Custom Error Messages

You can customize the validation error message ?

from django.db import models
from django.core.validators import FileExtensionValidator

class Resume(models.Model):
    applicant_name = models.CharField(max_length=100)
    resume_file = models.FileField(
        upload_to='resumes/',
        validators=[
            FileExtensionValidator(
                allowed_extensions=['pdf'],
                message='Please upload only PDF files for resumes.'
            )
        ]
    )

Using in Forms

You can also add FileExtensionValidator directly in forms ?

from django import forms
from django.core.validators import FileExtensionValidator

class DocumentForm(forms.Form):
    title = forms.CharField(max_length=100)
    file = forms.FileField(
        validators=[
            FileExtensionValidator(
                allowed_extensions=['pdf', 'doc', 'docx'],
                message='Only PDF and Word documents are allowed.'
            )
        ]
    )

Multiple Validators

Combine FileExtensionValidator with other validators for comprehensive file validation ?

from django.db import models
from django.core.validators import FileExtensionValidator
from django.core.exceptions import ValidationError

def validate_file_size(file):
    max_size = 5 * 1024 * 1024  # 5MB
    if file.size > max_size:
        raise ValidationError('File size cannot exceed 5MB.')

class MediaFile(models.Model):
    title = models.CharField(max_length=100)
    file = models.FileField(
        upload_to='media/',
        validators=[
            FileExtensionValidator(allowed_extensions=['jpg', 'png', 'mp4', 'pdf']),
            validate_file_size
        ]
    )

Conclusion

Django's FileExtensionValidator provides a simple yet powerful way to control file uploads by validating extensions. Use it in models or forms to ensure only approved file types are accepted, enhancing both security and user experience in your applications.

Updated on: 2026-03-27T11:56:21+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements