解决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 相关文章推荐
python3实现短网址和数字相互转换的方法
Apr 28 Python
spyder常用快捷键(分享)
Jul 19 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
Python类的继承用法示例
Jan 31 Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 Python
python正则表达式匹配IP代码实例
Dec 28 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
python绘制趋势图的示例
Sep 17 Python
python 提高开发效率的5个小技巧
Oct 19 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/04/14 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
Vue拖拽组件开发实例详解
2018/05/11 Javascript
centos 上快速搭建ghost博客方法分享
2018/05/23 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python实现在线翻译功能
2020/03/03 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
董事长岗位职责
2013/11/30 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
工作试用期自我评价
2015/03/10 职场文书
关于社会实践的心得体会(2016最新版)
2016/01/25 职场文书
《实心球》教学反思
2016/02/23 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python