Python在Django中上传图片开发示例

先决条件–Django简介
在大多数网站中, 我们经常处理媒体数据, 例如图像, 文件等。在Django中, 我们可以借助model field来处理图像。ImageField.
在本文中, 我们创建了应用image_app在一个名为的示例项目中image_upload.
第一步是在settings.py文件。

MEDIA_ROOT =os.path.join(BASE_DIR, 'media' ) MEDIA_URL = '/media/'

MEDIA_ROOT
用于将文件存储在计算机中的服务器路径。
MEDIA_URL是浏览器通过Http访问文件的参考URL。
在里面urls.py我们应该像这样编辑配置
from django.conf import settings from django.conf.urls.static import static if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

一个样品
models.py
应该是这样的, 因为我们创建了一个
酒店模型
其中包括酒店名称及其形象。
在此项目中, 我们从用户那里获取酒店名称及其图像, 以用于酒店预订网站。
# models.py class Hotel(models.Model): name = models.CharField(max_length = 50 ) hotel_Main_Img = models.ImageField(upload_to = 'images/' )

这里upload_to将指定图像应驻留到的目录, 默认情况下django在以下目录下创建目录媒体上传图片时将自动创建的目录。无需明确创建媒体目录。
我们必须创建一个表格文件下image_app, 这里我们正在处理模型形式使内容更易于理解。
# forms.py from django import forms from .models import *class HotelForm(forms.ModelForm):class Meta: model = Hotel fields = [ 'name' , 'hotel_Main_Img' ]

Django会隐式处理表单验证, 而无需在脚本中进行显式声明, 并且Django会根据我们在脚本中指定的模型字段在页面中创建类似的表单字段
models.py
文件。
这是模型形式的优势。
现在创建一个范本目录下image_app因为我们必须创建一个用于上传图像的html文件。 HTML文件应如下所示。
< !DOCTYPE html> < html lang = "en"> < head> < meta charset = "UTF-8"> < title> Hotel_image< /title> < /head> < body> < form method = "post" enctype = "multipart/form-data"> {% csrf_token %} {{ form.as_p }} < button type = "submit"> Upload< /button> < /form> < /body> < /html>

发出POST请求时, 我们必须以某种方式对构成请求主体的数据进行编码。因此, 我们必须在form标签中指定编码格式。多部分/表单数据复杂得多, 但是它允许整个文件包含在数据中。
csrf_token用于防止跨站点请求伪造。
form.as_p只需将所有元素包装在HTML段落标签中。优点是不必在模板中编写循环来显式添加HTML以包围每个标题和字段。
在里面views.py下image_app在这种情况下, 我们必须编写一个视图以接收来自用户的请求, 并返回一些html页面。
from django.http import HttpResponse from django.shortcuts import render, redirect from .forms import *# Create your views here. def hotel_image_view(request):if request.method = = 'POST' : form = HotelForm(request.POST, request.FILES)if form.is_valid(): form.save() return redirect( 'success' ) else : form = HotelForm() return render(request, 'hotel_image_form.html' , { 'form' : form})def success(request): return HttpResponse( 'successfully uploaded' )

每当hotel_image_view点击, 该请求是开机自检, 我们正在创建模型表单的实例表格= HotelForm(request.POST, request.FILES)图像将存储在request.FILES一。如果有效, 则保存到数据库中并重定向到成功URL, 该URL指示成功上传图像。如果方法不是POST, 我们将使用创建的html模板进行渲染。
urls.py看起来像这样–
from django.contrib import admin from django.urls import path from django.conf import settings from django.conf.urls.static import static from .views import *urlpatterns = [ path( 'image_upload' , hotel_image_view, name = 'image_upload' ), path( 'success' , success, name = 'success' ), ]if settings.DEBUG: urlpatterns + = static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

现在进行迁移并运行服务器。
Python在Django中上传图片开发示例

文章图片
当我们在浏览器中点击URL时, 它看起来像。
Python在Django中上传图片开发示例

文章图片
上传图像后, 它将显示成功。
Python在Django中上传图片开发示例

文章图片
现在在项目目录中媒体目录将被创建, 在该目录中将创建图像并将图像存储在其下。这是最终结果。
Python在Django中上传图片开发示例

文章图片
最终输出存储在数据库中
现在, 我们可以编写一个用于访问这些图像的视图, 为简单起见, 我们以一个图像为例, 它也适用于许多图像。
# Python program to view # for displaying imagesdef display_hotel_images(request):if request.method = = 'GET' :# getting all the objects of hotel. Hotels = Hotel.objects. all () return render((request, 'display_hotel_images.html' , { 'hotel_images' : Hotels}))

用于显示图像的示例html文件模板。
< !DOCTYPE html> < html lang = "en"> < head> < meta charset = "UTF-8"> < title> Hotel Images< /title> < meta name = "viewport" content = "width=device-width, initial-scale=1"> < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> < /script> < script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"> < /script> < /head> < body> {% for hotel in hotel_images %} < div class = "col-md-4"> {{ hotel.name }} < img src = "http://www.srcmini.com/{{ hotel.hotel_Main_Img.url }}" class = "img-responsive" style = "width: 100%; float: left; margin-right: 10px; " /> < /div> {% endfor %}< /body> < /html>

将网址路径插入urls.py文件中
# urls.py path('hotel_images', display_hotel_images, name = 'hotel_images'),

这是我们尝试访问图像时浏览器上的最终视图。
Python在Django中上传图片开发示例

文章图片
酒店形象
注意怪胎!巩固你的基础Python编程基础课程和学习基础知识。
【Python在Django中上传图片开发示例】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

    推荐阅读