解决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 相关文章推荐
pycharm 使用心得(五)断点调试
Jun 06 Python
python执行外部程序的常用方法小结
Mar 21 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
Mar 30 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
python 函数内部修改外部变量的方法
Dec 18 Python
python使用正则筛选信用卡
Jan 27 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
python处理“
Jun 10 Python
python opencv 实现对图像边缘扩充
Jan 19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Django框架模板用法详解
Jun 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数组及条件,循环语句学习
2012/11/11 PHP
php使用curl访问https示例分享
2014/01/17 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
Vue.use源码分析
2017/04/22 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Python生成器generator用法示例
2018/08/10 Python
怎么快速自学python
2020/06/22 Python
巴西购物网站:Submarino
2020/01/19 全球购物
如何手工释放资源
2013/12/15 面试题
会计与审计毕业生自荐信范文
2013/12/30 职场文书
四年级数学教学反思
2014/02/02 职场文书
二年级小学生评语
2014/04/21 职场文书
植树造林的宣传标语
2014/06/23 职场文书
爱护公共设施的标语
2014/06/24 职场文书
总经理致辞
2015/07/29 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
MYSQL 运算符总结
2021/11/11 MySQL