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 相关文章推荐
机器学习经典算法-logistic回归代码详解
Dec 22 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
详解Python locals()的陷阱
Mar 26 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
python 实现视频 图像帧提取
Dec 10 Python
Python中join()函数多种操作代码实例
Jan 13 Python
python时间日期操作方法实例小结
Feb 06 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
Feb 06 Python
python+opencv实现目标跟踪过程
Jun 21 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实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
jQuery访问浏览器本地存储cookie、localStorage和sessionStorage的基本用法
2017/10/20 jQuery
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python3操作Excel文件(读写)的简单实例
2019/09/02 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Bealls Florida百货商店:生活服饰、家居装饰和鞋子
2018/02/23 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
日语专业推荐信
2013/11/12 职场文书
精彩的广告词
2014/03/19 职场文书
生日寄语大全
2014/04/08 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
增员口号大全
2014/06/18 职场文书
委托书的写法
2014/08/30 职场文书
十七岁的单车观后感
2015/06/12 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android