定制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 04 Python
python实现简单socket通信的方法
Apr 19 Python
浅析python递归函数和河内塔问题
Apr 18 Python
python 调用c语言函数的方法
Sep 29 Python
将python代码和注释分离的方法
Apr 21 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
Python中的引用和拷贝实例解析
Nov 14 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
Python django框架开发发布会签到系统(web开发)
Feb 12 Python
Python 之 Json序列化嵌套类方式
Feb 27 Python
python库sklearn常用操作
Aug 23 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
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
JavaScript实现文字与图片拖拽效果的方法
2015/02/16 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
如何基于filter实现网站整体变灰功能
2020/04/17 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
简单谈谈Python流程控制语句
2016/12/04 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
Python zip函数打包元素实例解析
2019/12/11 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
十一酒店活动方案
2014/02/20 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
优秀班主任工作总结2015
2015/05/25 职场文书
教务处干事工作总结
2015/08/14 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
JavaScript 数组去重详解
2021/09/15 Javascript