定制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模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
Python实现动态添加类的属性或成员函数的解决方法
Jul 16 Python
用python实现对比两张图片的不同
Feb 05 Python
python实战教程之自动扫雷
Jul 13 Python
java判断三位数的实例讲解
Jun 10 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
基于Django实现日志记录报错信息
Dec 17 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
Python如何绘制日历图和热力图
Aug 07 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
Python基于unittest实现测试用例执行
Nov 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php在线代理转向代码
2012/05/05 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
jquery+json实现分页效果
2016/03/07 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
python如何调用百度识图api
2020/09/29 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
2014年个人总结范文
2015/03/09 职场文书
文明旅游倡议书
2015/04/28 职场文书
超市员工辞职信范文
2015/05/12 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
一行Python命令实现批量加水印
2022/04/07 Python
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript