定制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操作redis的方法
Jul 07 Python
python检查字符串是否是正确ISBN的方法
Jul 11 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
python实现朴素贝叶斯算法
Nov 19 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python openCV获取人脸部分并存储功能
Aug 28 Python
Python遍历字典方式就实例详解
Dec 28 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
10个python爬虫入门实例(小结)
Nov 01 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 Python
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
May 24 Python
python对文档中元素删除,替换操作
Apr 02 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常用的安全过滤函数集锦
2014/10/09 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
vue实现评论列表功能
2019/10/25 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python中的装饰器详解
2015/04/13 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
浅谈tensorflow之内存暴涨问题
2020/02/05 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
波兰最大的度假胜地和城市公寓租赁运营商:Sun & Snow
2018/10/18 全球购物
面试后的英文感谢信
2014/02/01 职场文书
幼儿园招生广告
2014/03/19 职场文书
难忘的一天教学反思
2014/04/30 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
环卫处个人工作总结
2015/03/04 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang