解决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学习笔记 下载
Feb 10 Python
Python日期操作学习笔记
Oct 07 Python
python使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
python如何实现内容写在图片上
Mar 23 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
详解python单元测试框架unittest
Jul 02 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
python二进制文件的转译详解
Jul 03 Python
简单了解Python3里的一些新特性
Jul 13 Python
python基于socket函数实现端口扫描
May 28 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 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/03/10 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
JQuery 入门实例1
2009/06/25 Javascript
关于js datetime的那点事
2011/11/15 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
js实现各浏览器全屏代码实例
2018/07/03 Javascript
vue中轮训器的使用
2019/01/27 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
python实现大学人员管理系统
2019/10/25 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
基于keras输出中间层结果的2种实现方式
2020/01/24 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
公司副总经理任命书
2014/06/05 职场文书
家具商场的活动方案
2014/08/16 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
学校政风行风整改方案
2014/10/25 职场文书
青岛海底世界导游词
2015/02/11 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
mysq启动失败问题及场景分析
2021/07/15 MySQL
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL