资讯专栏INFORMATION COLUMN

django之重写FileField字段的保存

wangzy2019 / 2103人阅读

摘要:重写字段的保存,以重命名为例添加配置中末尾添加配置如下,指定指向的操作文件中的类文件上传重写添加应用下添加包,注意有文件,下创建文件,文件内容为初始化重写方法文件扩展名文件目录定义文件名,源文件名,避开系统定义的随机字符串追加,所

重写FileField字段的保存,以重命名为例

settings.py添加配置

settings.py中末尾添加配置如下,指定指向的操作文件中的类:

# 文件上传重写
DEFAULT_FILE_STORAGE = "app.customfilefield.storage.FileStorage"
添加FileStorage

app应用下添加python包customfilefield,注意有init.py文件,customfilefield下创建py文件storage.py,文件内容为:

storage.py

# -*-coding:utf-8 -*-
from django.core.files.storage import FileSystemStorage
from django.http import HttpResponse
from django.conf import settings
import os, time, random
from app import utils

class FileStorage(FileSystemStorage):
    def __init__(self, location=settings.MEDIA_ROOT, base_url=settings.MEDIA_URL):
        #初始化
        super(FileStorage, self).__init__(location, base_url)

    #重写 _save方法
    def _save(self, name, content):
        #文件扩展名
        ext = os.path.splitext(name)[1]
        #文件目录
        d = os.path.dirname(name)
        # 定义文件名,源文件名,避开系统定义的随机字符串追加,所以避开不用name字段
        end = utils.find_last(str(content), ".")
        filename = ""
        if end != -1:
            filename = str(content)[:end]
        # 定义文件名,年月日时分秒随机数
        fn = time.strftime("%Y%m%d%H%M%S")
        fn = fn + "_%d" % random.randint(0,100)
        #重写合成文件名
        name = os.path.join(d, filename + fn + ext)
        #调用父类方法
        return super(FileStorage, self)._save(name, content)

utils.py

# 获取字符串中指定字符最后一次出现的位置
def find_last(string,str):
    last_position=-1
    while True:
        position=string.find(str,last_position+1)
        if position==-1:
            return last_position
        last_position=position

如此,最后上传的文件名为原文件名加上年月日时分秒加上0-100的随机数保存,效果如下:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41008.html

相关文章

  • django开发model篇-Field类型讲解

    摘要:今天介绍一下开发中,定义模型时用到的相关字段类型和字段选项。的实例是作为类型保存到数据库中的,默认字符串的最大长度是,但是可以使用参数指定最大长度。浮点类型,用中的实例表示整数类型。关于的字段类型和参数就先讲到这里。 今天介绍一下django开发中,定义模型时用到的相关字段类型和字段选项。 先说说常用的字段类型:1) AutoField: 自增字段类型,当自定义自增类型的id时,可以使...

    glumes 评论0 收藏0
  • Django ORM

    摘要:对象关系映射,简称模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。在业务逻辑层和数据库层之间充当了桥梁的作用。每个字段被指定为一个类属性,每个属性映射到一个数据库列。字符类型,必须提供参数,表示字符长度。 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是...

    BlackHole1 评论0 收藏0
  • 第一篇(从django后台解析excel数据批量导入数据库)

    摘要:总结整个过程的难点在于获取文件对象,从数据中取值然后在按取出,这样我们就可以从后台上传文件,然后进行批量导入数据库,其他数据格式只需要改和中的数据字段就可以 第一篇(从django后台解析excel数据批量导入数据库) 文章会在github中持续更新 作者: knthony github 联系我 1.django 如何从后台上传excel中批量解析数据 要从django后台导入...

    2i18ns 评论0 收藏0
  • python入门 django入门 (一)

    摘要:本人年开发经验,现就职于电信,因工作需要学习,记录自己的学习记录。 本人java10年开发经验,现就职于电信,因工作需要学习python,记录自己的学习记录。后面也...

    hzc 评论0 收藏0
  • Python_Django

    摘要:为了将代码规范,约定俗成将视图放置在项目或应用程序目录中命名为文件中。必须接受字段表示字符串长度不能超过该值,默认的标签最常用的。例,自动添加发布时间。以字符串的形式存在,默认最大长度,可以通过参数设置。用于保存通用唯一识别码的字段。 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重...

    BearyChat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<