关于定制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 相关文章推荐
Cookie 注入是怎样产生的
Apr 08 Javascript
学习ExtJS table布局
Oct 08 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
jQuery实现折线图的方法
Feb 28 Javascript
AngularJs实现ng1.3+表单验证
Dec 10 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
Google 地图API资料整理及详细介绍
Aug 06 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 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
杏林同学录(九)
2006/10/09 PHP
thinkphp实现图片上传功能分享
2014/03/04 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
javascript的事件描述
2006/09/08 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
JavaScript 学习技巧
2010/02/17 Javascript
基于jquery的图片轮播 tab切换组件
2012/07/19 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
JS 中使用Promise 实现红绿灯实例代码(demo)
2017/10/20 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
Vue源码解析之数组变异的实现
2018/12/04 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python科学计算之scipy——optimize用法
2019/11/25 Python
如何验证python安装成功
2020/07/06 Python
python 模块导入问题汇总
2021/02/01 Python
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
校三好学生主要事迹
2014/01/11 职场文书
小学教师师德感言
2014/02/10 职场文书
请假条范文大全
2014/04/10 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
小区推广策划方案
2014/06/06 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
患者身份识别制度
2015/08/06 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书