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中的hashlib和base64加密模块使用实例
Sep 02 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
python套接字流重定向实例汇总
Mar 03 Python
python中lambda()的用法
Nov 16 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
flask-socketio实现WebSocket的方法
Jul 31 Python
Python判断有效的数独算法示例
Feb 23 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Python 中pandas索引切片读取数据缺失数据处理问题
Oct 09 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
python实现语音常用度量方法的代码详解
May 25 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 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
详解PHP处理密码的几种方式
2016/11/30 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JavaScript获取Url里的参数
2014/12/18 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
Vue实现6位数密码效果
2018/08/18 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
Mac PyCharm中的.gitignore 安装设置教程
2020/04/16 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
工作的心得体会
2013/12/31 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
七一建党节演讲稿
2014/09/11 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
大国崛起观后感
2015/06/02 职场文书
听证会主持词
2015/07/03 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
高中体育课教学反思
2016/02/16 职场文书
使用Django框架创建项目
2022/06/10 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python