您现在的位置是: 网站首页 >学习总结 学习总结

models中上传图片(文件)重命名

admin2018年8月27日 14:03 Django | 文件 1413人已围观

# Django上传图片(文件)重命名 在项目中创建`utils`包 在包中创建`storage.py`文件,用于存储图片或文件调用 ## 存储文件类 ```python #! /usr/bin/env python # -*- coding: utf-8 -*- from django.core.files.storage import FileSystemStorage class FileStorage(FileSystemStorage): from django.conf import settings def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL, prefix='DEFAULT'): # 初始化 self.prefix = prefix super(FileStorage, self).__init__(location, base_url) # 重写_save()方法 def _save(self, name, content): """ :param name: 上传文件名称 :param content: :return: 上传的文件进行重命名 """ import os import time import random file_ext = os.path.splitext(name)[1] # 文件扩展名 file_dir = os.path.dirname(name) # 文件目录 file_name = "{}_{}_{}".format(self.prefix, str(time.strftime("%Y%m%d_%H%M%S")), random.randint(10, 99)) file = os.path.join(file_dir, file_name + file_ext) # 重新合成文件名 # 调用父类方法 return super(FileStorage, self)._save(file, content) ``` ## 模型中使用 ```python from utils.storage import FileStorage class Article(models.Model): # 。。。。 cover = models.ImageField(upload_to='blog/cover/%Y/%m', default='blog/cover/default-cover.png', storage=FileStorage(prefix='BLOG_COVER'), blank=True, null=True, verbose_name='封面图') # 。。。。 ``` 增加`storage=FileStorage(prefix='BLOG_COVER')`,也可以不带参数,类中初始化就不需要参数了,这儿是方便也可以对其他文件进行重命名,可以定义文件的前缀,修改完后需要执行`makemigrations`和`migrate` 如果上传文件可以将`ImageField`换为`FileField` ![BLOG_20180827_140444_87](/media/blog/images/2018/08/BLOG_20180827_140444_87.png "博客图集BLOG_20180827_140444_87.png")

很赞哦! (1)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行2285天
  • 系统信息:Linux
  • 后台程序:Python: 3.8.10
  • 网站框架:Django: 3.2.6
  • 文章统计:257 篇
  • 文章评论:63 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 公众号:微信扫描二维码,关注我们
  • QQ群:QQ加群,下载网站的学习源码
返回
顶部
标题 换行 登录
网站