解决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发送HTTP请求的方法小结
Jul 08 Python
Python的pycurl包用法简介
Nov 13 Python
python迭代器与生成器详解
Mar 10 Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
对Django url的几种使用方式详解
Aug 06 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
Django如何实现密码错误报错提醒
Sep 04 Python
Python实例教程之检索输出月份日历表
Dec 16 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
ES6的新特性概览
2016/03/10 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
Python实现Linux下守护进程的编写方法
2014/08/22 Python
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
python中实现控制小数点位数的方法
2019/01/24 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
python文件排序的方法总结
2020/09/13 Python
新闻专业推荐信范文
2013/11/20 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
护士年终考核评语
2014/12/31 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python
OpenFeign实现远程调用
2022/08/14 Java/Android