Django中FilePathField字段的用法


Posted in Python onMay 21, 2020

class FilePathField(path=None[, match=None, recursive=False, max_length=100, **options])

一个 CharField ,内容只限于文件系统内特定目录下的文件名。有三个参数, 其中第一个是 必需的:

FilePathField.path

必填。这个FilePathField 应该得到其选择的目录的绝对文件系统路径。例如: "/home/images".

FilePathField.match

可选的.FilePathField 将会作为一个正则表达式来匹配文件名。但请注意正则表达式将将被作用于基本文件名,而不是完整路径。例如: "foo.*.txt$", 将会匹配到一个名叫 foo23.txt 的文件,但不匹配到 bar.txt 或者 foo23.png.

FilePathField.recursive

可选的.True 或 False.默认是False.声明是否包含所有子目录的路径

FilePathField.allow_files

可选的.True 或 False.默认是True.声明是否包含指定位置的文件。该参数或allow_folders 中必须有一个为 True.

FilePathField.allow_folders

是可选的.输入 True 或者 False.默认值为 False.声明是否包含指定位置的文件夹。该参数或 allow_files 中必须有一个为 True.

当然,这些参数可以同时使用。

有一点需要提醒的是 match只匹配基本文件名(base filename), 而不是整个文件路径(full path). 例如:

FilePathField(path="/home/images", match="foo.*", recursive=True)

...将匹配/home/images/foo.png而不是/home/images/foo/bar.png 因为只允许匹配 基本文件名(foo.png 和 bar.png).

FilePathField实例被创建在您的数据库为varchar列默认最大长度为 100 个字符。作为与其他字段,您可以更改使用的max_length最大长度。

大多数网站在插入图片时一般都是这样处理的:

上传大尺寸图时,自动生成一张缩略图;网页中插入缩略图,并把地址指向大尺寸的图。

所以在Django中,我这样定义主要字段:

title = models.CharField(max_length = 120)
img = models.ImageField(upload_to = 'screenshots')
thumb = models.FilePathField(path = 'screenshots/thumb')

为什么thumb不是ImageFiled呢?因为考虑到Admin中上传的是大图,而缩略图不是上传,而是自动生成的。所以在这样写。具体的处理是(假设MEDIA_ROOT为/tmp,MEDIA_URL为http://localhost/media/:

上传图片(test.jpg)至MEDIA_ROOT/screenshots,此时img的属性是:img.name = screenshots/test.jpg, img.path = /tmp/screenshots/test.jpg, img.url = http://localhost/media/screenshots/test.jpg

判断图片大小是否需要做缩略图,如果不需要,直接复制img.path到thumb,否则,生成一张缩略图(以test-thumb.jpg命名)保存在screenshots/thumb下。

在网页中插入图片时,就可以简单地用<a href="{% object.img.url %}" rel="external nofollow" ><img title="{% object.title %}" src="{% object.thumb %}" alt="{% object.title %}"></a>来表示了。object表示一个ScreenShot。

补充知识:django FileFIeld和ImageField 上传路径改写

我就废话不多说了,大家还是直接看代码吧!

def get_file_path(instance, filename):
  return 'file/document/%s/%s/%s' % (instance.period.code, instance.student.college.code, filename)

class Document(models.Model):
  title = models.CharField(max_length=50, blank=True, verbose_name="文档名", default="")
  student = models.ForeignKey('accounts.Student', verbose_name="学生")
  period = models.ForeignKey('systemconfig.Periods', verbose_name="阶段")
  file = models.FileField(upload_to=get_file_path, verbose_name="文档", blank=True, null=True)
  mark = models.SmallIntegerField(null=True, blank=True, verbose_name="标记")
  create_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)

  class Meta:
    verbose_name = "学生报告文档"
    verbose_name_plural = "学生报告文档"
重点就是get_file_path

def get_file_path(instance, filename):
return 'file/document/%s/%s/%s' % (instance.period.code, instance.student.college.code, filename)


class Document(models.Model):
  title = models.CharField(max_length=50, blank=True, verbose_name="文档名", default="")
  student = models.ForeignKey('accounts.Student', verbose_name="学生")
  period = models.ForeignKey('systemconfig.Periods', verbose_name="阶段")
  file = models.FileField(upload_to=get_file_path, verbose_name="文档", blank=True, null=True)
  mark = models.SmallIntegerField(null=True, blank=True, verbose_name="标记")
  create_time = models.DateTimeField(verbose_name="添加时间", auto_now_add=True)

class Meta:
    verbose_name = "学生报告文档"
verbose_name_plural = "学生报告文档"

以上这篇Django中FilePathField字段的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python list中append()与extend()用法分享
Mar 24 Python
Python合并多个装饰器小技巧
Apr 28 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python2 与python3的print区别小结
Jan 16 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python读取ini配置文件过程示范
Dec 23 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
python 实现IP子网计算
Feb 18 Python
python小型的音频操作库mp3Play
Apr 24 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 #Python
使用 django orm 写 exists 条件过滤实例
May 20 #Python
django 解决自定义序列化返回处理数据为null的问题
May 20 #Python
python实现126邮箱发送邮件
May 20 #Python
python3.6使用SMTP协议发送邮件
May 20 #Python
Python操作Excel把数据分给sheet
May 20 #Python
python3通过qq邮箱发送邮件以及附件
May 20 #Python
You might like
php 文章采集正则代码
2009/12/28 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
小试JQuery的AutoComplete插件
2011/05/04 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
BootStrap中的表单大全
2016/09/07 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
python笔记(2)
2012/10/24 Python
Python字节单位转换实例
2019/12/05 Python
详解如何修改python中字典的键和值
2020/09/29 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
css3 实现滚动条美化效果的实例代码
2021/01/06 HTML / CSS
YesBabyOnline美国:全球性的在线婚纱礼服工厂
2018/05/05 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
什么是Web Service?
2012/07/25 面试题
出纳的岗位职责
2013/11/09 职场文书
军训生自我鉴定范文
2013/12/27 职场文书
致短跑运动员广播稿
2014/01/09 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
心理健康活动总结
2014/04/30 职场文书
安全生产月活动总结
2014/05/04 职场文书
啦啦队口号大全
2014/06/16 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
运动会广播稿50字
2015/08/19 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
MySQL慢查询的坑
2021/04/28 MySQL