django之对FileField字段的upload_to的设定方法


Posted in Python onJuly 28, 2019

用django开发,经常要处理用户上传的文件, 比如user模型里面如果又个人头像的字段 ImageField等等,而django在FielField字段(包括ImageField)的支持和扩展是做的很好的,首先一个问题,是上传的文件,django是放到哪里去了,(note: 文件流是不会放到数据库里面的,该字段在数据库中只存储路径),django提供了upload_to属性

以下介绍upload_to的具体使用方法

1.最直接的方式,硬编码路径

# MyProject.settings.py 里面设置MEDIA_ROOT and MEDIA_URL

MEDIA_ROOT = os.path.join(BASE_DIR, 'upload/')
MEDIA_URL = '/upload/' #这个是在浏览器上访问该上传文件的url的前缀

# models.py

class User(models.Model):
 avatar = ImageField(upload_to = 'avatar/')
 #实际的路径就是 MEDIA_ROOT/avatar/filename
 #所以可以用uoload_to来指定文件存放的前缀路径

2.使用strftime()

如果觉得以上方式太僵硬,万一文件重名了,那就会有各种问题了,为了避免重名,django在upload_to上内置了strftime()函数

# models.py
class User(models.Model):
 avatar = ImageField(upload_to = 'avatar/%Y/%m/%d/')

这样子的方式,%Y、%m、%d分别表示年、月、日

3.更加灵活的方式

当然,如果觉得只是避免文件路径重名,还是不能满足你,其实,django还允许你重写一个upload_to函数,重定义上传文件的路径前缀

# models.py

#让上传的文件路径动态地与user的名字有关
def upload_to(instance, fielname):
 return '/'.join([MEDIA_ROOT, instance.user_name, filename])

class User(models.Model):
 avatar = ImageField(upload_to = upload_to)
 user_name = CharField(max_length = 250)

以上这篇django之对FileField字段的upload_to的设定方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的五种异常处理机制介绍
Sep 02 Python
Python中字典映射类型的学习教程
Aug 20 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
使用tensorflow实现AlexNet
Nov 20 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
python实现简单的购物程序代码实例
Mar 03 Python
在echarts中图例legend和坐标系grid实现左右布局实例
May 16 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
python UIAutomator2使用超详细教程
Feb 19 Python
PyQt QMainWindow的使用示例
Mar 24 Python
Django ImageFiled上传照片并显示的方法
Jul 28 #Python
Python线上环境使用日志的及配置文件
Jul 28 #Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 #Python
处理python中多线程与多进程中的数据共享问题
Jul 28 #Python
在django中图片上传的格式校验及大小方法
Jul 28 #Python
python之生产者消费者模型实现详解
Jul 27 #Python
python单线程下实现多个socket并发过程详解
Jul 27 #Python
You might like
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
微信支付的开发流程详解
2016/09/13 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
2017/02/17 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
JS实现在文本指定位置插入内容的简单示例
2017/12/22 Javascript
vue cli 3.0 使用全过程解析
2018/06/14 Javascript
使用vue2.0创建的项目的步骤方法
2018/09/25 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python 字符串定义
2009/09/25 Python
Python新手实现2048小游戏
2015/03/31 Python
对python:threading.Thread类的使用方法详解
2019/01/31 Python
Python迭代器协议及for循环工作机制详解
2020/07/14 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
2014年大学生四年规划书范文
2014/04/03 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
捐助倡议书
2015/01/19 职场文书
委托书英文
2015/01/28 职场文书
赤壁观后感(2)
2015/06/15 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis