解决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检测网页是否有日常链接
Jun 03 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
Python除法之传统除法、Floor除法及真除法实例详解
May 23 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
NumPy排序的实现
Jan 21 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
Python smtp邮件发送模块用法教程
Jun 15 Python
python多线程和多进程关系详解
Dec 14 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 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实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
JavaScript面向对象编程入门教程
2014/04/16 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
大学生标准推荐信范文
2013/11/25 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
民政局个人整改措施
2014/09/24 职场文书
圆明园观后感
2015/06/03 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
SpringRetry重试框架的具体使用
2021/07/25 Java/Android