Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
