Python 在Django中通过FileExtensionValidator验证文件扩展名
开发人员可以使用高级的Python Web框架Django快速简便地设计Web应用程序。提供了一整套用于创建Web应用程序的工具和库,并遵循模型-视图-控制器(MVC)的架构模式。
为什么要在Python中使用Django
从个人努力到大型商业解决方案,Django被用于创建各种Web应用程序。它在构建复杂的数据驱动网站(包括社交网络网站如Instagram、电子商务平台和内容管理系统)方面表现出色。Django提供了许多开箱即用的功能,如URL路由、数据库管理、用户身份验证和模板。因此,开发人员可以专注于构建应用程序逻辑,而不是花费时间在基础架构上。
借助FileExtensionValidator的帮助,开发人员可以创建自己的允许和禁止的文件扩展名列表,提供了一个灵活和可适应的解决方案。然后,他们可以修改验证过程以满足其独特应用的要求,确保仅接受安全和相关的文件。
由于FileExtensionValidator与Django的表单验证框架轻松集成,实施非常简单。开发人员只需添加几行代码就可以为他们的文件上传表单添加这个关键的保护层,保护他们的应用程序和用户免受潜在危险。
如何使用文件扩展名验证器
要检查由FileField或ImageField上传的文件的文件扩展名,Django提供了FileExtensionValidator验证器。
示例1
在这个例子中,我们创建一个视图来控制文件上传。使用提供的信息,我们构建一个表单对象,验证其有效性,然后将表单内容保存到数据库中。
步骤
- 使用命令python manage.py startapp fileuploader,在Django中创建一个新的应用程序。
-
在fileuploader应用程序的models.py文件中定义一个用于上传文件的FileField的模型:
-
在fileuploader应用程序的forms.py文件中,构建一个用于管理文件上传的表单。
-
在fileuploader应用程序的views.py文件中,创建一个用于管理文件上传的视图。
-
在fileuploader应用程序的templates文件夹中创建两个HTML模板upload.html和success.html,用于预览上传表单和成功上传后的成功消息。
-
项目的urls.py文件现在必须包含URL模式,并且项目的settings.py文件必须将fileuploader应用程序添加到INSTALLED_APPS列表中:
示例
from django.db import models
from django.core.validators import FileExtensionValidator
from django import forms
from .models import UploadedFile
from django.shortcuts import render
from .forms import FileUploadForm
class UploadedFile(models.Model):
png_file = models. FileField(upload_to='png_files/', validators=
[FileExtensionValidator(allowed_extensions=['png'])])
class FileUploadForm(forms.ModelForm):
class Meta:
model = UploadedFile
fields = ['png_file']
'''The FileUploadForm class is an inheritor of forms in this instance.
Additionally, we have selected the png_file field as the field to be shown
and the UploadedFile model as the form's model.'''
#Defining the Upload method
def upload_file(request):
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return render(request, 'fileuploader/success.html')
else:
form = FileUploadForm()
return render(request, 'fileuploader/upload.html', {'form': form})
# Code for settings.py file
INSTALLED_APPS = [
'fileuploader',
# ..
]
# Code for URL.py file
from django.urls import path
from fileuploader.views import upload_file
urlpatterns = [
path('upload/', upload_file, name='upload_file'),
# ...
]
'''Now that the server has been set up and is running, you can upload PNG
files by going to http://localhost:8000/upload/ and typing the command python
manage.py runserver.'''
输出
根据上述步骤,我们将得到一个基本的索引文件,如下所示。
这仅允许png文件,不允许任何其他文件。
结论
在Django中,FileExtensionValidator是验证网络应用程序中文件扩展名的重要工具。总之,它使开发人员能够强制限制、增强安全性,并在文件上传方面提供无缝的用户体验。通过将此验证器纳入其Django项目中,开发人员可以确保上传文件的一致性,保护免受潜在的安全威胁,并对文件上传过程进行严格控制。