解决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中装饰器的用法
Apr 27 Python
python脚本替换指定行实现步骤
Jul 11 Python
python和flask中返回JSON数据的方法
Mar 26 Python
解决pandas 作图无法显示中文的问题
May 24 Python
python编辑用户登入界面的实现代码
Jul 16 Python
利用python循环创建多个文件的方法
Oct 25 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
Python编程实现tail-n查看日志文件的方法
Jul 08 Python
如何基于python把文字图片写入word文档
Jul 31 Python
python一些性能分析的技巧
Aug 30 Python
k-means & DBSCAN 总结
Apr 27 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
要会喝咖啡也要会知道咖啡豆
2021/03/03 咖啡文化
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
深入理解js generator数据类型
2016/08/16 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
vue-cli+webpack在生成的项目中使用bootstrap实例代码
2017/05/26 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
python 获取字符串MD5值方法
2018/05/29 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
2018/11/10 Python
python requests使用socks5的例子
2019/07/25 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Python函数调用追踪实现代码
2020/11/27 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
高校教师自荐信范文
2014/03/13 职场文书
探亲假请假条
2014/04/11 职场文书
小露珠教学反思
2014/04/30 职场文书
班级体育活动总结
2014/07/05 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书