解决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描述器descriptor详解
Feb 03 Python
python友情链接检查方法
Jul 08 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
python递归下载文件夹下所有文件
Aug 31 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python尾递归优化实现代码及原理详解
Oct 09 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
Jan 06 Python
Django debug为True时,css加载失败的解决方案
Apr 24 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
Apr 21 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
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php及codeigniter使用session-cookie的方法(详解)
2017/04/06 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
JavaScript File分段上传
2016/03/10 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
javascript实现前端分页效果
2020/06/24 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
Python中的迭代器漫谈
2015/02/03 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python实现登陆文件验证方法
2018/10/06 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
EJB timer的种类
2014/10/28 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
护理专业毕业生自我鉴定
2013/10/08 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
保护环境倡议书范文
2014/05/13 职场文书
投标诚信承诺书
2014/05/26 职场文书
预备党员党支部意见
2015/06/02 职场文书
python区块链实现简版工作量证明
2022/05/25 Python