定制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 相关文章推荐
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
详解python解压压缩包的五种方法
Jul 05 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
django框架cookie和session用法实例详解
Dec 10 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python如何使用turtle库绘制图形
Feb 26 Python
Python计算指定日期是今年的第几天(三种方法)
Mar 26 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python中如何添加自定义模块
Jun 09 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 Python
Python reversed反转序列并生成可迭代对象
Oct 22 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
php 生成签名及验证签名详解
2016/10/26 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
详解Vue源码之数据的代理访问
2018/12/11 Javascript
Vue循环中多个input绑定指定v-model实例
2020/08/31 Javascript
Python实现约瑟夫环问题的方法
2016/05/03 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
python多线程同步实例教程
2019/08/11 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
详解pyinstaller生成exe的闪退问题解决方案
2020/06/19 Python
Python中使用Selenium环境安装的方法步骤
2021/02/22 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
高中毕业自我鉴定范文
2013/10/02 职场文书
贺卡寄语大全
2014/04/11 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
明星邀请函
2015/02/02 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
Golang全局变量加锁的问题解决
2021/05/08 Golang
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
docker-compose部署Yapi的方法
2022/04/08 Servers
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android