解决django FileFIELD的编码问题


Posted in Python onMarch 30, 2020

当获取FileField数据时会出现编码问题

在数据库里显示的是D:\python项目\wxmkczpy\uploadfile\QQ截图20190210180915.png

而取出后变成

D%3A/python%E9%A1%B9%E7%9B%AE/wxmkczpy/uploadfile/QQ%E6%88%AA%E5%9B%BE20190210180915.png

这是url编码

所以可以用urllib 的parse模块解决

from urllib import parse
 
# Create your tests here.
a = "D%3A/python%E9%A1%B9%E7%9B%AE/wxmkczpy/uploadfile/QQ%E6%88%AA%E5%9B%BE20190210180915.png"
str3 = parse.unquote(a) #解码字符串
print(str3)

"C:\Program Files\Python36\python.exe" D:/python项目/wxmkczpy/wechat_app/tests.py
D:/python项目/wxmkczpy/uploadfile/QQ截图20190210180915.png

补充知识:Django中FilePathField字段的使用

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的编码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python编程中time模块的使用
Nov 20 Python
python学习之编写查询ip程序
Feb 27 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
Python常见内置高效率函数用法示例
Jul 31 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python实现合并excel表格的方法分析
Apr 13 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
Django中和时区相关的安全问题详解
Oct 12 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 Python
Python自动化测试PO模型封装过程详解
Jun 22 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 #Python
Django 删除upload_to文件的步骤
Mar 30 #Python
python with语句的原理与用法详解
Mar 30 #Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 #Python
Python进程的通信Queue、Pipe实例分析
Mar 30 #Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 #Python
django 扩展user用户字段inlines方式
Mar 30 #Python
You might like
php date与gmdate的获取日期的区别
2010/02/08 PHP
php微信公众平台开发之获取用户基本信息
2015/08/17 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
setTimeout和setInterval的区别你真的了解吗?
2011/03/31 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
JS日期加减,日期运算代码
2015/11/05 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
详解Python字符串对象的实现
2015/12/24 Python
深入理解Python装饰器
2016/07/27 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
电子商务应届生求职信
2013/11/16 职场文书
总裁岗位职责
2013/12/04 职场文书
社会实践感言
2014/01/25 职场文书
校园之星获奖感言
2014/01/29 职场文书
安全生产标语大全
2014/10/06 职场文书
故宫英文导游词
2015/01/31 职场文书
党支部工作总结2015
2015/04/01 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
mysql数据库实现设置字段长度
2022/06/10 MySQL