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实现xml与数据库读取转换的方法
Jun 17 Python
python中int与str互转方法
Jul 02 Python
python中pika模块问题的深入探究
Oct 13 Python
Python实现常见的回文字符串算法
Nov 14 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python求最大值最小值方法总结
Jun 25 Python
Django实现发送邮件找回密码功能
Aug 12 Python
Python中关于浮点数的冷知识
Sep 22 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
Python3.9新特性详解
Oct 10 Python
python 下载文件的几种方法汇总
Jan 06 Python
如何用python爬取微博热搜数据并保存
Feb 20 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函数,php爱好者站推荐
2007/03/19 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
CI框架的安全性分析
2016/05/18 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
js实现上传图片之上传前预览图片
2013/03/25 Javascript
深入理解JavaScript系列(28):设计模式之工厂模式详解
2015/03/03 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
全新打包工具parcel零配置vue开发脚手架
2018/01/11 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
Python SQLite3数据库操作类分享
2014/06/10 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python将视频转换为全字符视频
2019/04/26 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
美国精油公司:Plant Therapy
2019/05/17 全球购物
大学生毕业自我评价范文分享
2013/11/11 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
公务员检讨书
2014/11/01 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python