解决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之引用和类属性的初步理解
May 15 Python
python文件写入实例分析
Apr 08 Python
浅析Python多线程下的变量问题
Apr 28 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
May 30 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python 定时器,轮询定时器的实例
Feb 20 Python
python实现梯度法 python最速下降法
Mar 24 Python
python实现将range()函数生成的数字存储在一个列表中
Apr 02 Python
python实现一个简单RPC框架的示例
Oct 28 Python
使用python向MongoDB插入时间字段的操作
May 18 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初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
10个实用的PHP代码片段
2011/09/02 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
js图片自动切换效果处理代码
2013/05/07 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
使用angular写一个hello world
2015/01/23 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
python虚拟环境的安装配置图文教程
2017/10/20 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
python super的使用方法及实例详解
2019/09/25 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
python实现扫雷小游戏
2020/04/24 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
css3隔行变换色实现示例
2014/02/19 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
英文感谢信格式
2015/01/21 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
部队2015年终工作总结
2015/04/02 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python