您现在的位置是: 网站首页 >学习总结 学习总结
models中上传图片(文件)重命名
admin2018年8月27日 14:03
【Django | 文件
】
2429人已围观
# 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` 
很赞哦! (1)
相关文章
文章交流
- emoji
当前用户
未登录,点击 登录猜你喜欢
Django使用Email跟踪代码错误---排除部分url引起的404错误和EXTERNAL IP错误
-
【Flask微电影】24.前台会员中心,会员注册登录退出
-
【Schedule轮班排班】06.生成值班数据,获取上次值班人员
-
【Vue+DRF生鲜电商】21.用户中心个人资料的展示,并在Vue中实现个人资料更新
-
【Vue+DRF生鲜电商】08.ViewSets & Routers显示商品列表
-
【CRM客户关系管理】16. 只读字段readonly_fields处理,表单排除只读显示
-
【CRM客户关系管理】18.多选字段filter_horizontal的实现,js移动多选框数据和过滤
-
【Flask微电影】04.定义数据模型,生成数据表和初始用户
-
【Schedule轮班排班】01.环境搭建,设计数据库



GitHub
QQ
StarMeow