Django教程-如何使用 Django 上传图像
图像上传是任何现代网络应用程序的主要功能之一。它允许用户将图像或图片上传到服务器上。幸运的是,Django 提供了处理图像的简单过程,特别是上传图像或图片。使用它,我们可以创建一个漂亮的 Web 应用程序,用户可以在其中上传带有标题的图像。
在本教程中,我们将讨论如何在 Django 应用程序中上传图像。在我们进一步讨论之前,请确保您具备 Django 的基本知识。
将图像上传到 Django
大多数Web应用程序都处理文件或图像,Django提供了两个模型字段允许用户上传图像和文件。这些字段是FileField和ImageField;**基本上 ImageField 是FileField**的专门版本,它使用 Pillow 来确认文件是图像。让我们看看以下创建模型的示例。
models.py
from django.db import modelsclass UploadImage(models.Model):caption = models.CharField(max_length=200)image = models.ImageField(upload_to='images')def __str__(self):return self.caption
👉点击领取:最全Python资料合集
首先,我们需要安装 Pillow 库,这有助于处理图像。我们可以使用以下 pip 命令安装它。
pip install Pillowsettings.py
# Base url to serve media filesMEDIA_URL = '/media/'# Path where media is storedMEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL - 它将提供媒体文件。 MEDIA_ROOT - 它指定存储文件的根路径。
Urls.py
from django.contrib import adminfrom django.urls import pathfrom django.urls.conf import includefrom django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [path('admin/', admin.site.urls),path('', include(('sampleapp.urls'), namespace='sampleapp'))]if settings.DEBUG:urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
python manage.py makemigationspython manage.py migrate
from django.db import modelsfrom django.forms import fieldsfrom .models import UploadImagefrom django import formsclass UserImage(forms.ModelForm):class meta:# To specify the model to be used to create formmodels = UploadImage# It includes all the fields of modelfields = '__all__'
要显示此表单,我们需要在模板文件夹下创建image_form.html文件。
template/image.form.html
{% extends 'base.html' %}{% block content %}<form method="post" enctype="multipart/form-data">{% csrf_token %}{{ form.as_p }}<button type="submit">Upload</button></form>{% if img_obj %}<h3>Succesfully uploaded : {{img_obj.caption}}</h3><img src="{{ img_obj.image.url}}" alt="connect" style="max-height:300px">{% endif %}{% endblock content %}
注意 - 我们使用 enctype =“multipart/form-data”,它允许通过 POST 发送文件。如果没有 enctype,用户无法通过 POST 请求发送文件。必须包含在表单中才能处理文件或图像。
现在我们将创建视图来处理请求。
view.py
from django.shortcuts import redirect, renderfrom sampleapp.forms import UserImageFormfrom .models import UploadImagedef image_request(request):if request.method == 'POST':form = UserImageForm(request.POST, request.FILES)if form.is_valid():form.save()# Getting the current instance object to display in the templateimg_object = form.instancereturn render(request, 'image_form.html', {'form': form, 'img_obj': img_object})else:form = UserImageForm()return render(request, 'image_form.html', {'form': form})
让我们为此视图创建URL 。
sampleapp/urls.py
from django.urls import pathfrom .views import image_requestapp_name = 'sampleapp'urlpatterns = [path('', image_request, name = "image-request")
运行本地主机服务器后我们得到以下表格。
输出:
该文件将存储在我们在模型字段中提到的媒体/图像中。
结论
在本教程中,我们讨论了如何使用 Django 上传图像。Django 提供了简单的接口来执行图像或文件上传。我们只需要进行一些配置并在模型表单的字段中定义一个ImageField即可。我们还可以按照相同的过程上传任何文件(.xml、.pdf、.word、.etc),但我们需要在模型字段中将 ImageField 转换为 FileField。