django admin后台管理系统上传添加的图片保存到阿里云oss中

news2024/11/19 14:40:14

目录

一、配置admin上传图片到阿里云oss

二、配置admin后台上传到阿里云oss的图片为自定义名


问题描述:在开发自己的应用/网页前后台时可以调用阿里云oss的接口将图片上传至oss保存和读取,非常方便。但在django自带的admin后台中如何配置添加的图片也上传到阿里云oss中保存呢?

一、配置admin上传图片到阿里云oss

1,models模型

class Product(models.Model):
    """常规商品"""
    name = models.CharField(verbose_name="商品名称", max_length=50)
    desc = models.TextField(verbose_name="描述")
    show_img = models.ImageField(verbose_name="展示图", upload_to='images/')
    detail_img = models.ImageField(verbose_name="详情图", upload_to='images/')

    is_sale = models.BooleanField(verbose_name="是否上架", default=False)  # 为False时是下架
    is_show = models.BooleanField(verbose_name="是否展示在首页", default=True)  # 为True时是展示在首页
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="最后一次修改时间")


    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "常规商品"
        verbose_name_plural = verbose_name

2,配置media,支持图片上传

settings.py

# settings.py

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

项目根urls.py

# urls.py 添加media配置
from django.views.static import serve
from django.urls import path, include, re_path


urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/', include('users.urls')),
    path('goods/', include('goods.urls')),
    # 新增media配置
    re_path(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]

3,安装所需的模块

安装django-aliyun-oss2-storage,参考github上的 配置安装django-aliyun-oss2-storage

pip install -i https://pypi.douban.com/simple django-aliyun-oss2-storage

 如果pip安装不成功,可以到github中下载下来源码,解压后进入到setup.py所在的目录使用python setup.py install命令安装(过程中可能会报错,根据报错提示修改一下源码即可成功安装)

 4,settings.py中的相关配置

# admin后台上传图片到oss
DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'  # 默认admin 上传oss配置
ACCESS_KEY_ID = "40ZhE1HyuWdllpMh"
ACCESS_KEY_SECRET = "KbxtlKSvKyuyuymTiQvrxhsYFMguXy"
END_POINT = "oss-us-west-1.aliyuncs.com"
BUCKET_NAME = "XXXX"
ALIYUN_OSS_CNAME = "" # 自定义域名,如果不需要可以不填写
BUCKET_ACL_TYPE = "private" # private, public-read, public-read-write
# private:仅创建者可以访问对象,默认值。
# public-read:所有人都可以读取对象,但只有创建者可以写入。
# public-read-write:所有人都可以读取和写入对象,不推荐使用。
# authenticated-read:所有 AWS 用户都可以读取对象,但只有创建者可以写入。
# aws-exec-read:Amazon EC2 实例可以读取对象,但只有创建者可以写入。
# bucket-owner-read:存储桶所有者可以读取对象,但其他人不行。
# bucket-owner-full-control:存储桶所有者可以读取和写入对象,其他人不行。

至此,再次在admin后台中添加图片保存时就可以自动上传到阿里云oss中了

二、配置admin后台上传到阿里云oss的图片为自定义名

问题:admin后台在上传图片保存到oss时,会直接使用上传时的图片名称,这样会导致当存在同名文件上传时会替换掉之前上传的同名文件,这并不是我们想要的结果,所以对上传的图片进行自动生成不重复的名称就显得尤为重要!

1,重写默认方法

import os
from aliyun_oss2_storage.backends import AliyunMediaStorage


class AdminMediaStorage(AliyunMediaStorage):
    """重写AliyunMediaStorage自定义admin后台上传到阿里云oss的图片名称"""

    def get_available_name(self, name, max_length=None):
        # 生成admin后台自定义的图片名称
        ext = name.split('.')[-1]
        filename = '{}.{}'.format(uuid.uuid4().hex, ext)
        return super().get_available_name(filename, max_length), name

    def _save(self, name, content):
        # 获取存储路径并保存到阿里云OSS

        path = os.path.split(name[1])
        if getattr(content, 'content_type', None) is None:
            content_type = mimetypes.guess_type(name)[0]
            content.content_type = content_type
        return super()._save(path[0] + '/' + name[0], content)

 注:我这里重写的_save方法最后调用的了超类的_save方法的第一个参数是拼接了阿里云oss里保存文件的路径,如user/image/head_img.png

2,修改settings.py中原有的配置

原配置

DEFAULT_FILE_STORAGE = 'aliyun_oss2_storage.backends.AliyunMediaStorage'

 替换为

DEFAULT_FILE_STORAGE = 'goods.admin.AdminMediaStorage'  # 自定义admin 上传oss配置

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

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

相关文章

视频美颜SDK在直播领域的应用与挑战

目前&#xff0c;视频美颜技术在视频拍摄领域“大展神通”&#xff0c;因为视频美颜SDK可以帮助主播在直播中展现更加美好的形象&#xff0c;吸引更多的观众&#xff0c;并提升用户体验。然而&#xff0c;视频美颜SDK在直播领域的应用也面临着一些挑战。 一、视频美颜SDK在直…

回溯法【2-5】

假设一个推销员问题由下图定义&#xff0c;用回溯法求解 从1号结点出发的相应最短巡回路径&#xff08;每个顶点刚好到达一次&#xff09;。若用bestL表示搜索过程中产生的当前最优解&#xff0c;剪枝函数 L 设计为&#xff1a; L 已走过的路径长度 当前结点相关的最短边 所…

ChatGPT提示工程课程,吴恩达OpenAI

Principle 1: Write clear and specific instructions 使用明确的分隔符&#xff0c;是LLM知道这个某个单独的字段。 前提设置&#xff1a; import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fileopena…

LeetCode·每日一题·1080. 根到叶路径上的不足节点·递归

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/insufficient-nodes-in-root-to-leaf-paths/solutions/2279048/di-gui-zhu-shi-chao-ji-xiang-xi-by-xun-g-7rfd/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系…

如何使用 VSCode 软件运行C代码

VSCode 的下载和扩展的配置可以参考文章&#xff1a;VSCode 的安装与插件配置。 VSCode 是很好用的编辑器&#xff0c;通过给其配置 MinGW-w64 插件就可以在它上面编译运行C代码了。 在没有配置 MinGW-w64 插件时&#xff0c;在 VSCode 中运行下面的代码后打印如下图所示。 这…

【C语言】C的编译过程预处理

目录 一、 程序的翻译环境和执行环境1、翻译环境预处理编译汇编链接 2、执行环境 二、预处理详解1、预定义符号2、#define#define 语法#define 定义宏#define 替换规则 3、#和##4、宏和函数对比 一、 程序的翻译环境和执行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不…

为什么我们拥有庞大的语言模型,而Vision Transformers的规模却很小?

编者按&#xff1a;本文探讨了语言模型为何会比视觉模型的参数数量大得多的原因&#xff0c;并详细介绍了传统ViT训练方法在扩展时出现不稳定性的问题。 为此&#xff0c;本文介绍了如何改进架构以实现扩展&#xff0c;并讨论了实现模型最优状态的方法。同时&#xff0c;如何在…

Docker部署skywalking9.2版本

注意使用docker部署skywalking和使用tar包部署有点不一样OAP和UI需要分别部署原因是&#xff1a; SkyWalking UI 和 OAP 是 SkyWalking 的两个主要组件&#xff0c;它们之间的关系是前端和后端的关系。SkyWalking UI 是一个 Web 应用程序&#xff0c;它提供了一个漂亮的 UI 界面…

连续降税、人民币结算,巴西潜力爆发!开发细节见内!

本文内容 /CONTENT 01/中巴贸易现状 02/主要进口类别 03/通关和贸易政策 04/市场商业环境 05/本地公司的注册程序 06/巴西的主要节日 最近巴西降低关税&#xff0c;宣布人民币结算。想转市场的朋友不妨考虑巴西。 巴西作为南美洲最大的国家&#xff0c;当地人口占53%(…

ios音频焦点

音频焦点 两个或者两个以上的app可以同时向同一输出流播放音频。系统会将所有音频流混合在一起&#xff0c;但这样会给用户带来很大的困扰。为了避免所有音乐app同时播放&#xff0c;ios引入了“音频焦点”的概念。在ios中&#xff0c;音频焦点是操作系统为了管理音频硬件而引…

uvc驱动ioctl分析上

uvc驱动ioctl分析上 文章目录 uvc驱动ioctl分析上uvc_ioctl_querycap查询设备的能力uvc_ioctl_enum_fmt处理V4L2设备的枚举格式&#xff08;enum_fmt&#xff09;的ioctl操作uvc_ioctl_enum_fmt_vid_out枚举视频输出格式uvc_ioctl_enum_fmt_vid_cap枚举视频捕获格式 uvc_v4l2_g…

低代码到底有多爽?解放双手,推荐一款C端的低代码产品

前言引入 低代码&#xff08;LowCode&#xff09;就是一种可视化搭建系统&#xff0c;从字面意思来讲&#xff0c;一是可视化&#xff1b;二是少写代码。由此可见&#xff0c;低代码的出现是为了减轻和降低开发者的负担&#xff0c;让开发者减少重复劳动&#xff0c;避免资源和…

基于Angular+Nginx+Java+Spring开发的医院信息系统(HIS)源码

基于云计算技术的SaaS服务的医院信息系统源码 云HIS系统有效实现医疗数据共享与交换&#xff0c;解决数据重复采集及信息孤岛等问题。重构管理服务流程&#xff0c;重建统一的信息架构体系&#xff0c;重造病人服务环境&#xff0c;向不同类型的医疗机构提供SaaS化HIS服务解决…

如何在不损失质量的情况下压缩优化图像大小

您是否知道在将图像上传到 WordPress 之前对其进行优化会对您的网站速度产生巨大影响&#xff1f; 在开始时&#xff0c;许多初学者只是简单地上传图片&#xff0c;而没有针对网络对其进行优化。这些大图像文件会使您的网站变慢。 您可以通过将图像优化最佳实践作为常规博客程…

如何对高压功率放大器进行初步故障排查?

在使用测试仪器仪表进行实验检测的过程中&#xff0c;可能多少都遇到过这种情况&#xff1a;仪器开不了机无法点亮、设备幅值与理论值有较大差距、输出电压波形失真、设备异常过载、设备异响异味等等.... 作为测试仪器仪表的一种&#xff0c;功率放大器也可能会出现这种情况&a…

基于Java+SpringMvc+vue+element实现高效学生社团平台管理

基于JavaSpringMvcvueelement实现高效学生社团平台管理 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现

基于JavaSpringmvcvueelement实现高校心理健康系统详细设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源…

将java项目导出jar包,转成在windows上的可执行文件(没有java运行环境的电脑也可以)

前言 提示&#xff1a;直接将java运行环境一起打包没有java运行环境的电脑也可以&#xff1a; 近期在做一个java串口项目&#xff0c;需要将完整的项目导出.exe文件在没有java环境的电脑上运行&#xff0c;下面是详细的操作步骤以及遇到各种问题的解决办法.。 说明&#xff1…

HTTPS加密的简单介绍

前言 假设客户端给服务器发送HTTP请求,此时的数据都是明文的,如果黑客在这个过程中截取到了数据,进行篡改是非常容易的,这样就会造成严重后果. HTTPS和HTTP一样,都是应用层协议.只不过HTTPS在HTTP的基础上又加了一个加密层,保证传输数据的安全性. 下面我们就来探讨一下HTTPS是…

档案八防设备之新型产品多合一恒湿净化一体机

档案馆档案库房用加湿除湿除尘除酸净化一体机【囊括加湿机、除湿机、消毒机、净化机功能】 集成&#xff1a;加湿、除湿、消毒、净化四合一的智能一体机 一、简介 北京盛世宏博科技有限公司档案库房系列加湿除湿除尘除酸净化一体机是档案库房恒湿、和净化式&#xff0c;HB-670…