解决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中的应用之translate和maketrans用法详解
Aug 27 Python
python开发中module模块用法实例分析
Nov 12 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
pandas DataFrame 交集并集补集的实现
Jun 24 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
教你怎么用python selenium实现自动化测试
May 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
配置PHP使之能同时支持GIF和JPEG
2006/10/09 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
js 动态文字滚动的例子
2011/01/17 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
2020/06/02 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python2 对excel表格操作完整示例
2020/02/23 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
高级运动鞋:GREATS
2019/07/19 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
请说出几个常用的异常类
2013/01/08 面试题
大学班级文化建设方案
2014/05/06 职场文书
质量保证书格式
2015/02/27 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Python实现拼音转换
2021/06/07 Python
vue实现锚点定位功能
2021/06/29 Vue.js