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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
python argparser的具体使用
Nov 10 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
windows python3安装Jupyter Notebooks教程
Apr 13 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
Python通过format函数格式化显示值
Oct 17 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
在父页面调用子页面的JS方法
2013/09/29 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
Python中的ConfigParser模块使用详解
2015/05/04 Python
python实现装饰器、描述符
2018/02/28 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Python中openpyxl实现vlookup函数的实例
2020/10/28 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
学生无故旷课检讨书
2014/09/20 职场文书
2014年教务工作总结
2014/12/03 职场文书
婚宴邀请函
2015/01/30 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
超级礼物观后感
2015/06/15 职场文书
公司员工培训管理制度
2015/08/04 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript