您现在的位置是: 网站首页 >学习总结 学习总结
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