先决条件–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)
现在进行迁移并运行服务器。
文章图片
当我们在浏览器中点击URL时, 它看起来像。
文章图片
上传图像后, 它将显示成功。
文章图片
现在在项目目录中媒体目录将被创建, 在该目录中将创建图像并将图像存储在其下。这是最终结果。
文章图片
最终输出存储在数据库中
现在, 我们可以编写一个用于访问这些图像的视图, 为简单起见, 我们以一个图像为例, 它也适用于许多图像。
# 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编程基础课程和学习基础知识。
【Python在Django中上传图片开发示例】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。
推荐阅读
- Python教程快速入门完整指南
- Python Urllib模块介绍和用法示例
- Python变量介绍和用法示例
- Python可视化不同颜色空间中的图像
- Python Kivy的Vkeyboard(虚拟键盘)
- Python和Scala有什么区别(有哪些区别?)
- Python(使用Tkinter的重量转换GUI)
- Python Tkinter中的winfo_ismapped()和winfo_exist()
- 华南农大习题与考试|操作系统(10)多处理器调度和实时调度