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,所以也可以省略

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Arduino】小飞鱼通达二开实验ESP32使用红外寻迹传感器 (图文)

在智能小车项目中都会有一个功能就是自动巡线&#xff0c;今天小飞鱼通达来实验的就是这个红外寻迹传感器。 红外寻迹传感器的原理就是有一个小灯发出红外光&#xff0c;光线照到物体后进行反射&#xff0c;有一个接收器进行接收&#xff0c;当在一定距离内会导通电路&#xf…

网安加·百家讲坛 | 肖文棣:铸盾护企——面对勒索病毒产业链的企业防护之道

作者简介&#xff1a;肖文棣&#xff0c;OWASP中国广东分会负责人、网安加社区特聘专家&#xff0c;现任某外企安全架构师&#xff0c;负责应用安全设计、管理和评审等工作。 引言 随着信息技术的飞速发展&#xff0c;网络安全问题愈发凸显&#xff0c;企业面临的网络安全威胁…

瞎谈指令集和寄存器读写来驱动硬件

文章目录 前言一、到底什么是指令集&#xff1f;二、为什么现代CPU需要指令集&#xff1f;三、开发完指令集究竟有什么缺点&#xff1f;四、寄存器读写怎么验证&#xff1f;总结 前言 其实很早以前就想对这个话题展开来聊聊&#xff0c;但是对体系结构的理解也仅仅限于《量化体…

应急响应:应急响应流程,常见应急事件及处置思路

「作者简介」&#xff1a;冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础著作 《网络安全自学教程》&#xff0c;适合基础薄弱的同学系统化的学习网络安全&#xff0c;用最短的时间掌握最核心的技术。 这一章节我们需…

交通气象站:保障道路畅通的守护者

随着现代社会的飞速发展&#xff0c;交通网络日益密集&#xff0c;人们的出行越来越依赖于公路、铁路和航空等交通方式。然而&#xff0c;多变的天气条件常常给交通安全带来隐患&#xff0c;如大雾、雨雪、强风等恶劣天气不仅影响行车视线&#xff0c;还可能造成路面湿滑、结冰…

第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)

解题思路 这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列&#xff0c;我们可以使用深度优先搜索&#xff08;DFS&#xff09;的方法&#xff0c;尝试所有可能的降落顺序。 首先&#xff0c;我们需要理解题目中的条件。每架…

【MotionCap】pycharm 远程在wsl2 ubuntu20.04中root的miniconda3环境

pycharm wsl2 链接到pycharmsbin 都能看到内容,/root 下内容赋予了zhangbin 所有,pycharm还是看不到/root 下内容。sudo 安装了miniconda3 引发了这些问题 由于是在 root 用户安装的miniconda3 所以安装路径在/root/miniconda3 里 这导致了环境也是root用户的,会触发告警 WA…

冲击试样缺口拉刀V2U2U3U5

拉刀性能介绍 冲击试样缺口拉刀采用进口高速工具钢W18Cr4V材质&#xff0c;特殊工艺精密加工制造&#xff0c;硬度高&#xff0c;耐磨性好&#xff0c;使用寿命长&#xff0c;每把拉刀可加工试样达20&#xff0c;000多个。拉刀共54个齿&#xff08;深度5mm缺口拉刀为74个齿&am…

抖音本地生活服务商条件太高怎么办?低门槛方法来了!

随着本地生活赛道的潜力不断显现&#xff0c;本地生活服务商的数量也在与日俱增。而在所有开通本地生活服务板块的互联网平台中&#xff0c;日活跃用户数约8亿的抖音往往是众多创业者优先考虑的对象&#xff0c;以抖音本地生活服务商如何申请为代表的相关问题也因此常出现在多个…

排序算法(1)之插入排序----直接插入排序和希尔排序

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

页面加载503 Service Temporarily Unavailable异常

最近发现网页刷新经常503&#xff0c;加载卡主&#xff0c;刷新页面就正常了。 研究之后发现是页面需要的js文件等加载失败了。 再研究之后发现是nginx配置的问题。 我之前为了解决一个漏洞检测到目标主机可能存在缓慢的HTTP拒绝服务攻击 把nginx的连接设置了很多限制&#…

PHP传奇游戏推广信息发布站程序源码带会员发布

这是一个游戏导航网站程序。可以做任何一款游戏的推广发布&#xff0c;会员注册发布&#xff0c;后台审核通过&#xff0c;前台就可以展示&#xff0c;非常不错的游戏发布平台

一个项目学习Vue3---响应式基础

观察下面一段代码&#xff0c;学习响应式基础的全部内容 <template><div><div>将下面的msg属性放到上面来:{{ msg }}</div><button click"count">{{ count }}</button><button click"object.count.value">{{ o…

【Carsim】Carsim2019与Matlab2015b联合仿真测试

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Carsim2019与Matlab2015b联合仿真测试。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

python-糖果俱乐部(赛氪OJ)

[题目描述] 为了庆祝“华为杯”的举办&#xff0c;校园中开展了许多有趣的热身小活动。小理听到这个消息非常激动&#xff0c;他赶忙去参加了糖果俱乐部的活动。 该活动的规则是这样的&#xff1a;摊位上有 n 堆糖果&#xff0c;第 i 堆糖果有 ai​ 个&#xff0c;参与的同学可…

面向工业化的多类电子元件自动计数系统测试报告

目录 1、项目描述 2、登录注册测试 2、主界面测试 2.1、在线计数测试 2.2、离线计数测试 2.3、浏览数据测试 1、项目描述 该系统利用机器视觉平台采集电子元件图像&#xff0c;设计并实现了适应不同形态分布的电子元件计数模型&#xff0c;能够快速且准确地进行计数和分类&…

昇思25天学习打卡营第九天|使用静态图加速

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第九天了。 今天是第九天&#xff0c;前八天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

高效的向量搜索算法——分层可导航小世界图(HNSW)

最近在接触大模型相关内容&#xff0c;发现一种高效的向量搜索算法HNSW&#xff0c;这里做一下记录。 在之前自己也接触过一段时间的复杂网络&#xff08;网络科学&#xff09;&#xff0c;没想到&#xff0c;将网络科学的思想引入到向量搜索算法中&#xff0c;可以产生令人眼前…

如何实现公网环境远程连接本地局域网宝塔FTP服务远程管理文件

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 &#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

Python28-5 k-means算法

k-means 算法介绍 k-means 算法是一种经典的聚类算法&#xff0c;其目的是将数据集分成 ( k ) 个不同的簇&#xff0c;每个簇内的数据点尽可能接近。算法的基本思想是通过反复迭代优化簇中心的位置&#xff0c;使得每个簇内的点与簇中心的距离之和最小。k-means 算法的具体步骤…