关于定制FileField中的上传文件名称问题


Posted in Javascript onAugust 22, 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中的上传文件名称,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
网上应用的一个不错common.js脚本
Aug 08 Javascript
jquery增加时编辑jqGrid(实例代码)
Nov 08 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
JS实现转动随机数抽奖特效代码
Apr 16 Javascript
springMVC结合AjaxForm上传文件
Jul 12 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
简单实现jquery焦点图
Dec 12 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
Sep 25 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
小程序实现抽奖动画
Apr 16 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 Javascript
React复制到剪贴板的示例代码
Aug 22 #Javascript
Angularjs实现下拉框联动的示例代码
Aug 22 #Javascript
vue.js异步上传文件前后端实现代码
Aug 22 #Javascript
node中koa中间件机制详解
Aug 22 #Javascript
理解javascript async的用法
Aug 22 #Javascript
React Native之TextInput组件解析示例
Aug 22 #Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 #Javascript
You might like
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
json简单介绍
2008/06/10 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
javascript定时器完整实例
2015/02/10 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
[03:03]2014DOTA2国际邀请赛 EG战队专访
2014/07/12 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
Python 功能和特点(新手必学)
2015/12/30 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python函数的万能参数传参详解
2019/07/26 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
详解Python 循环嵌套
2020/07/09 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
怎样拟定创业计划书
2014/05/01 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
医院标语大全
2014/06/23 职场文书
研究生论文答辩开场白
2015/05/27 职场文书
关于观后感的作文
2015/06/18 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
Go语言并发编程 sync.Once
2021/10/16 Golang
关于的python五子棋的算法
2022/05/02 Python