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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
使用Python制作自动推送微信消息提醒的备忘录功能
Sep 06 Python
python自动化生成IOS的图标
Nov 13 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
Oct 11 Python
Python序列化与反序列化pickle用法实例
Nov 11 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
May 18 Python
pyCharm 实现关闭代码检查
Jun 09 Python
python使用requests库爬取拉勾网招聘信息的实现
Nov 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
AngularJS的ng-click传参的方法
2017/06/19 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
关于微信小程序bug记录与解决方法
2018/08/15 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
Python中几种操作字符串的方法的介绍
2015/04/09 Python
Python二分法搜索算法实例分析
2015/05/11 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
2015年办公室人员工作总结
2015/05/15 职场文书
小学运动会通讯稿
2015/07/18 职场文书
毕业欢送会致辞
2015/07/29 职场文书