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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
python高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
利用python操作SQLite数据库及文件操作详解
Sep 22 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
python存储16bit和32bit图像的实例
Dec 05 Python
基于Tensorflow一维卷积用法详解
May 22 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
pycharm实现猜数游戏
Dec 07 Python
Python爬虫基础初探selenium
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 xml 入门学习资料
2011/01/01 PHP
linux下为php添加curl扩展的方法
2011/07/29 PHP
php中一个有意思的日期逻辑处理
2012/03/25 PHP
php中spl_autoload详解
2014/10/17 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
jquery 图片 上一张 下一张 链接效果(续篇)
2010/04/20 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python区分不同数据类型的方法
2019/10/14 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
python Paramiko使用示例
2020/09/21 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
食堂个人先进事迹
2014/01/22 职场文书
护理目标管理责任书
2014/07/25 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS