解决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在Console下显示文本进度条的方法
Feb 14 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
对python 自定义协议的方法详解
Feb 13 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
python 追踪except信息方式
Apr 25 Python
浅谈django 重载str 方法
May 19 Python
django queryset 去重 .distinct()说明
May 19 Python
使用pandas库对csv文件进行筛选保存
May 25 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
Python读取图像并显示灰度图的实现
Dec 01 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/02/21 PHP
php SQL Injection with MySQL
2011/02/27 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
jquery对表单操作2
2011/04/06 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
英国最大的宠物食品和宠物用品网上零售商: Zooplus
2016/08/01 全球购物
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
物业保安员岗位职责制度
2014/01/30 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
卖车协议书范文
2016/03/23 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
MySQL数据库表约束讲解
2022/06/21 MySQL