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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python中turtle库的使用实例
Sep 09 Python
python wxpython 实现界面跳转功能
Dec 17 Python
python3 常见解密加密算法实例分析【base64、MD5等】
Dec 19 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 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
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
yii用户注册表单验证实例
2015/12/26 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
详解jQuery事件
2017/01/13 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
[48:22]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python计算文本文件行数的方法
2015/07/06 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python 定义n个变量方法 (变量声明自动化)
2018/11/10 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
python实现TCP文件传输
2020/03/20 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
水污染治理专业毕业生推荐信
2013/11/14 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
学校社会实践活动总结
2014/07/03 职场文书
自主招生自荐信格式
2015/03/04 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
Python matplotlib多个子图绘制整合
2022/04/13 Python