关于定制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 相关文章推荐
让IE8支持DOM 2(不用框架!)
Dec 31 Javascript
Javascript Object.extend
May 18 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
javascript学习笔记(一) 在html中使用javascript
Jun 18 Javascript
javascript快速排序算法详解
Sep 17 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
JavaScript中常见获取元素的方法汇总
Mar 04 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
vue控制多行文字展开收起的实现示例
Oct 11 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 Javascript
深入理解 TypeScript Reflect Metadata
Dec 12 Javascript
vue 清空input标签 中file的值操作
Jul 21 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
jquery remove方法应用详解
2012/11/22 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
2015/12/14 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
js实现淡入淡出轮播切换功能
2017/01/13 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
nodejs使用express获取get和post传值及session验证的方法
2017/11/09 NodeJs
深入浅析Vue中的Prop
2018/06/10 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
python Opencv将图片转为字符画
2021/02/19 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
Python3数字求和的实例
2019/02/19 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
python编程的核心知识点总结
2021/02/08 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
纽约市的奢华内衣目的地:Anya Lust
2019/08/02 全球购物
教师自我剖析材料范文
2014/09/30 职场文书
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers