关于定制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 相关文章推荐
JQuery this 和 $(this) 的区别
Aug 23 Javascript
jquery+html5制作超酷的圆盘时钟表
Apr 14 Javascript
JS中的Replace方法使用经验分享
May 20 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
vue-router 学习快速入门
Mar 01 Javascript
layui中table表头样式修改方法
Aug 15 Javascript
小程序开发基础之view视图容器
Aug 21 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
Jan 19 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 Javascript
js/jQuery实现全选效果
Jun 17 jQuery
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
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
php里array_work用法实例分析
2015/07/13 PHP
用php代码限制国内IP访问我们网站
2015/09/26 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
PHP基于自定义类随机生成姓名的方法示例
2017/08/05 PHP
jquery tablesorter.js 支持中文表格排序改进
2009/12/09 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
微信小程序实现action-sheet弹出底部菜单功能【附源码下载】
2017/12/09 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python实现简单的计时器功能函数
2015/03/14 Python
python爬虫使用cookie登录详解
2017/12/27 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
python线程池如何使用
2020/05/28 Python
Python3爬虫带上cookie的实例代码
2020/07/28 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
单位提档介绍信
2014/01/17 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
认错检讨书
2014/10/02 职场文书
Python机器学习之KNN近邻算法
2021/05/14 Python
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
Django框架模板用法详解
2022/06/10 Python