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数据类型学习笔记
Jan 13 Python
python中hashlib模块用法示例
Oct 30 Python
如何用Python合并lmdb文件
Jul 02 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
实例讲解Python3中abs()函数
Feb 19 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
Python创建数字列表的示例
Nov 28 Python
详解Pycharm出现out of memory的终极解决方法
Mar 03 Python
Keras预训练的ImageNet模型实现分类操作
Jul 07 Python
解决PDF 转图片时丢文字的一种可能方式
Mar 04 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 UTF8中文字符截断函数代码
2012/09/11 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
php的debug相关函数用法示例
2016/07/11 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JS清除选择内容的方法
2015/01/29 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
详解python中的异常捕获
2020/12/15 Python
银行毕业实习自我鉴定
2013/09/19 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
购房委托书范本
2014/09/18 职场文书
见习报告怎么写
2014/10/31 职场文书
寒假安全保证书
2015/02/28 职场文书
2015年财务工作总结范文
2015/03/31 职场文书