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编写一个简单的FUSE文件系统的教程
Apr 02 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
python实现爬虫下载美女图片
Jul 14 Python
Python基于有道实现英汉字典功能
Jul 25 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
python2.7实现爬虫网页数据
May 25 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
Python3实现的反转单链表算法示例
Mar 08 Python
python字典的常用方法总结
Jul 31 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
Python代码需要缩进吗
Jul 01 Python
PyTorch device与cuda.device用法
Apr 03 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多进程通信-消息队列使用
2019/03/08 PHP
javascript radio 联动效果
2009/03/04 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
pandas string转dataframe的方法
2018/04/11 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python常见数字运算操作实例小结
2019/03/22 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
Python 如何提高元组的可读性
2019/08/26 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
上海中网科技笔试题
2012/02/19 面试题
旅游管理实习自我鉴定
2013/09/29 职场文书
销售工作岗位职责
2013/12/24 职场文书
三下乡活动方案
2014/01/31 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
新年祝酒词大全
2015/08/11 职场文书
javascript对象3个属性特征
2021/11/17 Javascript