关于定制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 相关文章推荐
js querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
Apr 07 Javascript
js页面跳转的常用方法整理
Oct 18 Javascript
Node.js模块加载详解
Aug 16 Javascript
transport.js和jquery冲突问题的解决方法
Feb 10 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
vue-cli中的babel配置文件.babelrc实例详解
Feb 22 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
vue使用Google Recaptcha验证的实现示例
Aug 23 Vue.js
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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
thinkPHP中create方法与令牌验证实例浅析
2015/12/08 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
vue实现从外部修改组件内部的变量的值
2020/07/30 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
分析python服务器拒绝服务攻击代码
2014/01/16 Python
Python和Java进行DES加密和解密的实例
2018/01/09 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
python实现图片转字符小工具
2019/04/30 Python
解析Python3中的Import
2019/10/13 Python
python创建n行m列数组示例
2019/12/02 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python