解决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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
Python判断变量是否已经定义的方法
Aug 18 Python
Python标准库内置函数complex介绍
Nov 25 Python
Python中的默认参数详解
Jun 24 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
python opencv摄像头的简单应用
Jun 06 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 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读取RSS feed的代码
2008/08/01 PHP
js兼容标准的表格变色效果
2008/06/28 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
jquery div拖动效果示例代码
2013/12/08 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
2018/11/08 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
Python 时间处理datetime实例
2008/09/06 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
对python多线程与global变量详解
2018/11/09 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
存储过程和函数的区别
2013/05/28 面试题
Unix/Linux开发面试题
2016/08/16 面试题
J2EE系统只能是基于web
2015/09/08 面试题
自我鉴定思想方面
2013/10/07 职场文书
最新茶叶店创业计划书
2014/01/14 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
考研英语辞职信
2015/05/13 职场文书
工作后的感想
2015/08/07 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
浅谈Vue的computed计算属性
2022/03/21 Vue.js