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 相关文章推荐
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
mac安装scrapy并创建项目的实例讲解
Jun 13 Python
Python反射和内置方法重写操作详解
Aug 27 Python
python分数表示方式和写法
Jun 26 Python
用sqlalchemy构建Django连接池的实例
Aug 29 Python
pytorch 指定gpu训练与多gpu并行训练示例
Dec 31 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
Python正则表达式如何匹配中文
May 27 Python
Python3爬虫里关于代理的设置总结
Jul 30 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
PHPMailer安装方法及简单实例
2008/11/25 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
深入理解JavaScript系列(37):设计模式之享元模式详解
2015/03/04 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
浅谈es6语法 (Proxy和Reflect的对比)
2017/10/24 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
jQuery实现鼠标拖拽登录框移动效果
2020/09/13 jQuery
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
Python传递参数的多种方式(小结)
2019/09/18 Python
tf.concat中axis的含义与使用详解
2020/02/07 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
生物技术专业研究生自荐信
2013/09/22 职场文书
校园绿化美化方案
2014/06/08 职场文书
亚运会口号
2014/06/20 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
保险公司增员口号
2015/12/25 职场文书
详解Java七大阻塞队列之SynchronousQueue
2021/09/04 Java/Android
使用Nginx的访问日志统计PV与UV
2022/05/06 Servers