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的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Unicode和Python的中文处理
Mar 19 Python
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
开源软件包和环境管理系统Anaconda的安装使用
Sep 04 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
python整合ffmpeg实现视频文件的批量转换
May 31 Python
python 中如何获取列表的索引
Jul 02 Python
Python Socket TCP双端聊天功能实现过程详解
Jun 15 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
使用Python爬取Json数据的示例代码
Dec 07 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP Error与Logging函数的深入理解
2013/06/03 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
php使用PDO方法详解
2014/12/27 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
对numpy中shape的深入理解
2018/06/15 Python
python requests指定出口ip的例子
2019/07/25 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
美国潜水装备、水肺潜水和浮潜设备商店:Leisure Pro
2018/08/08 全球购物
英语专业毕业生自我鉴定
2013/11/09 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android