关于定制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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
JavaScript 关键字屏蔽实现函数
Aug 02 Javascript
jquery移动listbox的值原理及代码
May 03 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
May 17 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
微信小程序 条件渲染详解
Oct 09 Javascript
Javascript中字符串replace方法的第二个参数探究
Dec 05 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
Feb 26 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
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
由JavaScript中call()方法引发的对面向对象继承机制call的思考
2011/09/12 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
详解JS面向对象编程
2016/01/24 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python Requests安装与简单运用
2016/04/07 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python中栈、队列与优先级队列的实现方法
2019/06/30 Python
Pandas的Apply函数具体使用
2020/07/21 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
Python接口自动化测试框架运行原理及流程
2020/11/30 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
机关驾驶员违规检讨书
2014/09/13 职场文书
加薪申请报告范本
2015/05/15 职场文书
故意杀人案辩护词
2015/05/21 职场文书
初中英语教学反思范文
2016/02/15 职场文书
《观潮》教学反思
2016/02/17 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
Ruby序列化和持久化存储 Marshal和Pstore介绍
2022/04/18 Ruby