定制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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
Python格式化压缩后的JS文件的方法
Mar 05 Python
python实现DES加密解密方法实例详解
Jun 30 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
python定时利用QQ邮件发送天气预报的实例
Nov 17 Python
使用Python读取大文件的方法
Feb 11 Python
django项目搭建与Session使用详解
Oct 10 Python
Scrapy框架使用的基本知识
Oct 21 Python
numpy下的flatten()函数用法详解
May 27 Python
tensorflow-gpu安装的常见问题及解决方案
Jan 20 Python
Python使用xlrd实现读取合并单元格
Jul 09 Python
有趣的二维码:使用MyQR和qrcode来制作二维码
May 10 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
详解webpack3如何正确引用并使用jQuery库
2017/08/26 jQuery
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
Python使用urllib模块的urlopen超时问题解决方法
2014/11/08 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
C#面试常见问题
2013/02/25 面试题
写给保洁员表扬信
2014/01/08 职场文书
参观考察邀请函范文
2014/01/29 职场文书
求职信名称怎么写
2014/05/26 职场文书
迎国庆演讲稿
2014/09/05 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
就业证明函
2015/06/17 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
学习党史心得体会2016
2016/01/23 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书