定制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日志模块logging简介
Apr 13 Python
python爬虫实战之爬取京东商城实例教程
Apr 24 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
python画一个玫瑰和一个爱心
Aug 18 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
Nov 06 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
Python实战之疫苗研发情况可视化
May 18 Python
Pytest中skip和skipif的具体使用方法
Jun 30 Python
全网非常详细的pytest配置文件
Jul 15 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
android上传图片到PHP的过程详解
2015/08/03 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
filemanage功能中用到的common.js
2007/04/08 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
jquery 表单验证之通过 class验证表单不为空
2015/11/02 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
Pycharm设置界面全黑的方法
2018/05/23 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
中专生自我鉴定范文
2013/12/19 职场文书
记者岗位职责
2014/01/06 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
公司委托书格式
2014/08/01 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
详解Vue的options
2021/05/15 Vue.js
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS