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中用fork()函数生成的子进程
May 04 Python
python删除列表内容
Aug 04 Python
Python实例一个类背后发生了什么
Feb 09 Python
浅析python协程相关概念
Jan 20 Python
对python中执行DOS命令的3种方法总结
May 12 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
python实现大文件分割与合并
Jul 22 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
Python tkinter制作单机五子棋游戏
Sep 14 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
浅谈json_encode用法
2015/03/05 PHP
DIV菜单层实现代码
2010/11/19 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
利用Python实现原创工具的Logo与Help
2018/12/03 Python
python读写csv文件方法详细总结
2019/07/05 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
学习python需要有编程基础吗
2020/06/02 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
Python用access判断文件是否被占用的实例方法
2020/12/17 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
个人简历自我评价
2014/01/06 职场文书
2014年会演讲稿范文
2014/01/06 职场文书
双语教学实施方案
2014/03/23 职场文书
小组名称和口号
2014/06/09 职场文书
退学证明范本3篇
2014/10/29 职场文书
矛盾论读书笔记
2015/06/29 职场文书
2019年最新借条范本!
2019/07/08 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
redis中lua脚本使用教程
2021/11/01 Redis
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP
muduo TcpServer模块源码分析
2022/04/26 Redis