定制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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
Python实现图像几何变换
Jul 06 Python
基于Python实现对PDF文件的OCR识别
Aug 05 Python
Pycharm学习教程(4) Python解释器的相关配置
May 03 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
python爬取淘宝商品详情页数据
Feb 23 Python
Python 识别12306图片验证码物品的实现示例
Jan 20 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
150行python代码实现贪吃蛇游戏
Apr 24 Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 Python
Python Serial串口基本操作(收发数据)
Nov 06 Python
图文详解matlab原始处理图像几何变换
Jul 09 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数组总结篇(一)
2008/09/30 PHP
浅析is_writable的php实现
2013/06/18 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
js加解密 脚本解密
2008/02/22 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
python中函数总结之装饰器闭包详解
2016/06/12 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
Python计算IV值的示例讲解
2020/02/28 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
公司庆典活动邀请函
2014/01/09 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
小马王观后感
2015/06/11 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
班级班风口号大全
2015/12/25 职场文书