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单例模式实例分析
Apr 08 Python
Python实现文件复制删除
Apr 19 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
python的变量与赋值详细分析
Nov 08 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
python3读取autocad图形文件.py实例
Jun 05 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Python基础知识学习之类的继承
May 31 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 header下载函数
2014/01/31 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
js函数调用常用方法详解
2012/12/03 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jQuery中children()方法用法实例
2015/01/07 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
js实现扫雷源代码
2020/11/27 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
python实现梯度下降算法
2020/03/24 Python
python: 自动安装缺失库文件的方法
2018/10/22 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
美国在线眼镜店:GlassesShop
2018/11/15 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
班组长安全职责
2014/01/05 职场文书
教师试用期自我鉴定
2014/02/12 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
写给导师的自荐信
2015/03/06 职场文书
面试通知邮件
2015/04/20 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
龙猫观后感
2015/06/09 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS