定制FileField中的上传文件名称实例


Posted in Python onAugust 23, 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中的上传文件名称实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
python循环监控远程端口的方法
Mar 14 Python
python遍历类中所有成员的方法
Mar 18 Python
python 字典(dict)按键和值排序
Jun 28 Python
Python从使用线程到使用async/await的深入讲解
Sep 16 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Python3离线安装Requests模块问题
Oct 13 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Ranorex通过Python将报告发送到邮箱的方法
Jan 12 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
python Pexpect模块的使用
Dec 25 Python
基于python元祖与字典与集合的粗浅认识
Aug 23 #Python
Python 多线程Threading初学教程
Aug 22 #Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 #Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 #Python
Python实现的矩阵类实例
Aug 22 #Python
Python实现图片转字符画的示例
Aug 22 #Python
利用aardio给python编写图形界面
Aug 21 #Python
You might like
PHP聊天室技术
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
python直接访问私有属性的简单方法
2016/07/25 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
解决python字典对值(值为列表)赋值出现重复的问题
2019/01/20 Python
django celery redis使用具体实践
2019/04/08 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
python speech模块的使用方法
2020/09/09 Python
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
大学生毕业鉴定
2014/01/31 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
祖国在我心中演讲稿300字
2014/05/04 职场文书
幼儿园课题方案
2014/06/09 职场文书
保护地球的标语
2014/06/17 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
助学感谢信范文
2015/01/21 职场文书
钱塘江大潮导游词
2015/02/03 职场文书
先进个人总结范文
2015/02/15 职场文书
linux下安装redis图文详细步骤
2021/12/04 Redis