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 27 Python
python解决方案:WindowsError: [Error 2]
Aug 28 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
Python WSGI的深入理解
Aug 01 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
python输入整条数据分割存入数组的方法
Nov 13 Python
基于python实现百度翻译功能
May 09 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
浅谈pandas dataframe对除数是零的处理
Jul 20 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 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上的memcache和memcached两个pecl库
2010/03/29 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
简单介绍JavaScript的变量和数据类型
2015/06/03 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
js 调用百度分享功能
2017/02/27 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
深入研究React中setState源码
2017/11/17 Javascript
Vue实现日历小插件
2019/06/26 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
centos6.7安装python2.7.11的具体方法
2017/01/16 Python
Python实现购物车功能的方法分析
2017/11/10 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
在python中将字符串转为json对象并取值的方法
2018/12/31 Python
django创建超级用户过程解析
2019/09/18 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
python numpy实现rolling滚动案例
2020/06/08 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
tensorflow2.0教程之Keras快速入门
2021/02/20 Python
英国儿童图书网站:Scholastic
2017/03/26 全球购物
大学生个人自荐信样本
2014/03/02 职场文书
安全生产大检查方案
2014/05/07 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
股东协议书范本2016
2016/03/21 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
如何利用React实现图片识别App
2022/02/18 Javascript