个性化阅读
专注于IT技术分析

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中上传图片1

当我们在浏览器中点击URL时, 它看起来像。

Python |在Django中上传图片2

上传图像后, 它将显示成功。

Python |在Django中上传图片3

现在在项目目录中媒体目录将被创建, 在该目录中将创建图像并将图像存储在其下。这是最终结果。

最终输出存储在我们的数据库中

最终输出存储在数据库中

现在, 我们可以编写一个用于访问这些图像的视图, 为简单起见, 我们以一个图像为例, 它也适用于许多图像。

# Python program to view 
# for displaying images
  
def 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 = "{{ 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编程基础课程和学习基础知识。

首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。


赞(0)
未经允许不得转载:srcmini » Python在Django中上传图片开发示例

评论 抢沙发

评论前必须登录!