定制FileField中的上传文件名称实例


Posted in Python onAugust 23, 2017

FileField中的upload_to属性可以设定上传文件的存储目录和名称,它可以是个字符串,也可以是个callable,比如一个方法。

当upload_to的值设为一个方法时,就可以对上传文件的名称进行修改了。方法需要两个参数,instance与filename,instance为此FileField所属的Model实例,filename为上传文件的名称。

举例:

def user_directory_path(instance, filename): 
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename> 
return 'user_{0}/{1}'.format(instance.user.id, filename) 

class MyModel(models.Model): 
upload = models.FileField(upload_to=user_directory_path)

当一个类定义了__call__方法时,也可以像func一样被调用,所以,upload_to的值也可以是一个定义了__call__方法的类。

比如,要根据上传时间为文件名加时间戳:

import hashlib 
import os 
import time 
 
from django.utils.deconstruct import deconstructible 
 
 
@deconstructible
class TimeStampFileName(object): 
  def __init__(self, path): 
    self.path = os.path.join(path, "%s%s") 
 
  def __call__(self, instance, filename): 
    extension = os.path.splitext(filename)[1] 
    data = "%s_%d"%(filename,int(time.time())) 
    file_hash = hashlib.sha1(data).hexdigest() 
    return self.path % (file_hash, extension)

Model中的FileField可以如下定义:

class MyModel(models.Model): 
  upload = models.FileField(upload_to=TimeStampFileName('media/'), )

以上这篇定制FileField中的上传文件名称实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
删除目录下相同文件的python代码(逐级优化)
May 25 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
python 接口返回的json字符串实例
Mar 27 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
python重要函数eval多种用法解析
Jan 14 Python
pytorch实现建立自己的数据集(以mnist为例)
Jan 18 Python
基于python实现可视化生成二维码工具
Jul 08 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 #Python
Python 多线程Threading初学教程
Aug 22 #Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 #Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 #Python
Python实现的矩阵类实例
Aug 22 #Python
Python实现图片转字符画的示例
Aug 22 #Python
利用aardio给python编写图形界面
Aug 21 #Python
You might like
php gd等比例缩放压缩图片函数
2016/06/12 PHP
php实现URL加密解密的方法
2016/11/17 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
Dojo 学习要点
2010/09/03 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
Python中with及contextlib的用法详解
2017/06/08 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Python银行系统实战源码
2019/10/25 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
python集合删除多种方法详解
2020/02/10 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
2014年业务员工作总结范文
2014/11/17 职场文书
2014年妇联工作总结
2014/11/21 职场文书
给老婆的道歉信
2015/01/20 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
Python访问Redis的详细操作
2021/06/26 Python