定制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中将字典转换为列表的方法
Sep 21 Python
如何高效使用Python字典的方法详解
Aug 31 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
Python设计模式之中介模式简单示例
Jan 09 Python
Python 实现网页自动截图的示例讲解
May 17 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
Python实现自动签到脚本的示例代码
Aug 19 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
操作Oracle的php类
2006/10/09 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
JavaScript使用slice函数获取数组部分元素的方法
2015/04/06 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
JS中的回调函数实例浅析
2018/03/21 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
Python发送以整个文件夹的内容为附件的邮件的教程
2015/05/06 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
python抖音表白程序源代码
2019/04/07 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
Python argparse模块使用方法解析
2020/02/20 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
销售员自我评价怎么写
2013/09/19 职场文书
机关财务管理制度
2014/01/17 职场文书
大专会计自我鉴定
2014/02/06 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
教师师德反思材料
2014/02/15 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
学校就业保障协议书
2019/06/24 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python