Django框架文件上传与自定义图片上传路径、上传文件名操作分析


Posted in Python onMay 10, 2019

本文实例讲述了Django框架文件上传与自定义图片上传路径、上传文件名操作。分享给大家供大家参考,具体如下:

文件上传

1、创建上传文件夹

在static文件夹下创建uploads用于存储接收上传的文件

在settings中配置,

MEDIA_ROOT=os.path.join(BASE_DIR,r'static/uploads')

2、定义上传表单

<form action="{% url 'app:do_upload' %}" 
method="post" enctype="multipart/form-data">

文件数据存储在request.FILES属性中

文件上传必须使用POST请求方式

<form method='post' action='x' enctype='multipart/form-data'>
 {% csrf_token %}
 <input type='file' name='icon'>
 <input type='submit' value='上传'>
<form>

3、手动存储文件

存储到关联用户的表字段中

def savefIcon(request):
if request.method == 'POST'
 f = request.FILES['icon']
 filePath = os.path.join(settings.MEDIA_ROOT,f.name)
 with open(filePath,'wb') as fp:
  for part in f.chunks():
   fp.write(part)

4、django内置存储

  • ImageField
    • 要导入pillow模块
  • FileField
  • 从request.FILES将文件获取出来,直接赋值给字段
  • 存储的时候,数据库存储的是路径
  • 存储在MEDIA_ROOT

自定义图片上传路径和上传文件名

图片上传中,如果不对上传的文件名做处理,很容易引起文件名重复,这会覆盖之前上传的图片,django提供了自定义上传文件名的方法。

def generate_filename(self, instance, filename):
 """
 Apply (if callable) or prepend (if a string) upload_to to the filename,
 then delegate further processing of the name to the storage backend.
 Until the storage layer, all file paths are expected to be Unix style
 (with forward slashes).
 """
 if callable(self.upload_to):
  filename = self.upload_to(instance, filename)
 else:
  dirname = datetime.datetime.now().strftime(self.upload_to)
  filename = posixpath.join(dirname, filename)
 return self.storage.generate_filename(filename)

上面的代码是django中对ImageField上传时,生成文件名的处理方式。如果 upload_to 的参数是可调用的,则直接调用来生成文件名(包括静态文件夹后的文件路径)。要自定义上传文件名就从这里着手。

import uuid
from django.db import models
def image_upload_to(instance, filename):
 return 'original_image/{uuid}/{filename}'.format(uuid=uuid.uuid4().hex, filename=filename)
class TestImageUpload(models.Model):
 image = models.ImageField(upload_to=image_upload_to)

按照上面的方式,就可以按照自己的意愿随意的处理文件名了(函数的参数个数是固定的)。

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python实现的DES加密算法和3DES加密算法实例
Jun 03 Python
python 2.6.6升级到python 2.7.x版本的方法
Oct 09 Python
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
浅谈python中get pass用法
Mar 19 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
Python实现删除某列中含有空值的行的示例代码
Jul 20 Python
Python接收手机短信的代码整理
Aug 02 Python
python 如何获取页面所有a标签下href的值
May 06 Python
Django框架实现分页显示内容的方法详解
May 10 #Python
Django框架验证码用法实例分析
May 10 #Python
Python爬虫实现验证码登录代码实例
May 10 #Python
详解如何管理多个Python版本和虚拟环境
May 10 #Python
不到40行代码用Python实现一个简单的推荐系统
May 10 #Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 #Python
Python3列表内置方法大全及示例代码小结
May 10 #Python
You might like
PHP缓存技术的多种方法小结
2012/08/14 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
分享20款美化网站的 jQuery Lightbox 灯箱插件
2014/10/10 Javascript
node.js中的fs.chown方法使用说明
2014/12/16 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
详解Python locals()的陷阱
2019/03/26 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
幼儿园辞职书
2015/02/26 职场文书
难以忽视的真相观后感
2015/06/05 职场文书