当前位置: 首页 > news >正文

Django + Vue 实现图片上传功能的全流程配置与详细操作指南

在这里插入图片描述

文章目录

  • 前言
  • 图片上传步骤
    • 1. urls 配置
    • 2. settings 配置
    • 3. models 配置
    • 4. 安装Pillow


前言

    在现代Web应用中,图片上传是一个常见且重要的功能。Django作为强大的Python Web框架,结合Vue.js这样的现代前端框架,能够高效地实现这一功能。本文将详细介绍如何在Django项目中配置图片上传的后端处理,并在Vue前端实现图片的选择、预览和上传功能。

图片上传步骤

1. urls 配置

from django.contrib import admin
from django.urls import path,includefrom django.conf import settings
from django.conf.urls.static import staticurlpatterns = [path('admin/', admin.site.urls),path('app/',include('app.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  • static 函数用于定义静态文件的URL模式,它接收两个参数:
    • 第一个参数是settings.MEDIA_URL,它是一个字符串,表示媒体文件的URL前缀。
    • 第二个参数是settings.MEDIA_ROOT,它是一个字符串,表示媒体文件在服务器上的存储路径。

2. settings 配置

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

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

  • 这行代码设置了Django项目中媒体文件的根目录。os.path.join是一个Python函数,用于连接多个路径部分,生成一个完整的路径。
  • BASE_DIR通常是一个变量,表示Django项目的根目录。这个目录是Django项目中所有其他路径的基准点。
  • 'media'是一个子目录,用于存放用户上传的媒体文件,比如图片、视频、文档等。

2. MEDIA_URL = '/media/'

  • 这行代码定义了媒体文件的URL前缀。当Django处理URL请求时,如果URL以/media/开头,它就会知道这个请求是指向媒体文件的。

3. models 配置

class ShopModel(models.Model):name = models.CharField(max_length=100)price = models.DecimalField(max_digits=3,decimal_places=2)count = models.IntegerField()info = models.CharField(max_length=200)is_checked = models.BooleanField(default=False)shopimg = models.ImageField(upload_to='imag/',null=True)# 默认状态参数-------------------------------# 保质期---剩余天数protect = models.IntegerField(null=True)def __str__(self):return self.nameclass Meta():db_table = 'shop'
  • models.ImageField:这是 Django 的一个字段类型,用于处理图像上传。它继承自 models.FileField,专门用于存储图像文件,比如 JPEG、PNG 等格式。
  • upload_to='imag/':这个参数指定了上传文件的保存路径。当用户上传图片时,Django 会将图片保存在 MEDIA_ROOT 目录下的 imag 文件夹中。
    • 例如,如果你的 MEDIA_ROOT 设置为 /path/to/media,则图片将被保存在 /path/to/media/imag/
  • null=True:这个参数允许字段可以存储空值。也就是说,如果用户没有上传图片,这个字段可以是 NULL,而不是必须有一个文件。

4. 安装Pillow

  • 在使用ImageField字段的时候,需要提前安装:pip install Pillow
  • Pillow 它提供了丰富的图像处理功能,使用它就可以完成对图像的操作了

前端代码:

<input type="file" accept="image/png" @change="imgChange">
upfile() {let formdata = new FormData();​      formdata.append('name',this.shop.name);
​      formdata.append('price',this.shop.price);
​      formdata.append('count',this.shop.count);
​      formdata.append('info',this.shop.info);
​      formdata.append('shopimg',this.shop.shopimg);this.$axios.post('http://127.0.0.1:8000/app/shops/',formdata,{
​        headers:{'Content-Type':'multipart/form-data'}}).then((result) => {
​        console.log(result);}).catch((err) => {
​        console.log(err);});
}

FormData

  • FormData 用于创建键值对集合和构造包含文件的请求体,这些键值对可以被用来发送 HTTP 请求。它特别适用于需要上传表单数据,包括文件。
  • FormData 对象提供了 append 方法来添加键值对,并且能够自动处理文件上传的边界和编码。使用这种方式,开发者可以轻松地将文件作为二进制数据上传到服务器。
  • 使用 Axios 发送 POST 请求,并将 FormData 作为请求体。请求头内容应该修改为:'Content-Type':'multipart/form-data'
  • 由于 FormData 会自动设置 Content-Typemultipart/form-data,所以也可以省略

在这里插入图片描述

相关文章:

  • Java数据结构-树的面试题
  • android perfetto使用技巧梳理
  • 23种设计模式之装饰者模式
  • java如何删除字符串内部分字符
  • 【python】PyQt5控件尺寸大小位置,内容边距等API调用方法实战解析
  • 昇思25天学习打卡营第17天|DCGAN生成漫画头像
  • Name for argument of type [java.lang.String] not specified, and parameter name information not avail
  • 让你的 Rabbids Rockstar人物化身加入欢乐行列!
  • 【Hive实战】HiveMetaStore的指标采集告警
  • 包装与食品机械
  • Springweb详解
  • 使用 Mybatis 时,调用 DAO接口时是怎么调用到 SQL 的?
  • Linux上web服务器搭建(Apache、Nginx)
  • 人脉社群平台微信小程序系统源码
  • golang中的类型转换那些事
  • 「译」Node.js Streams 基础
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • CSS盒模型深入
  • golang中接口赋值与方法集
  • httpie使用详解
  • js面向对象
  • Otto开发初探——微服务依赖管理新利器
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Tornado学习笔记(1)
  • ucore操作系统实验笔记 - 重新理解中断
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 安装python包到指定虚拟环境
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 大整数乘法-表格法
  • 反思总结然后整装待发
  • 每天一个设计模式之命令模式
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 数据可视化之 Sankey 桑基图的实现
  • 异常机制详解
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • NLPIR智能语义技术让大数据挖掘更简单
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • #{} 和 ${}区别
  • (10)STL算法之搜索(二) 二分查找
  • (day 12)JavaScript学习笔记(数组3)
  • (第二周)效能测试
  • (独孤九剑)--文件系统
  • (九)信息融合方式简介
  • (力扣)1314.矩阵区域和
  • (利用IDEA+Maven)定制属于自己的jar包
  • (学习日记)2024.01.09
  • (转)VC++中ondraw在什么时候调用的
  • ***详解账号泄露:全球约1亿用户已泄露
  • .Net面试题4
  • @Autowired @Resource @Qualifier的区别
  • @vue/cli 3.x+引入jQuery
  • [.net] 如何在mail的加入正文显示图片
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪