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脚本关闭文件操作的机制
Jun 28 Python
Python中基本的日期时间处理的学习教程
Oct 16 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
python实现dijkstra最短路由算法
Jan 17 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
python中 * 的用法详解
Jul 10 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
Jupyter notebook如何实现指定浏览器打开
May 13 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
解析argc argv在php中的应用
2013/06/24 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
jQuery实现获取h1-h6标题元素值的方法
2017/03/06 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
微信小程序抽奖组件的使用步骤
2021/01/11 Javascript
python定时器使用示例分享
2014/02/16 Python
详解Python3.1版本带来的核心变化
2015/04/07 Python
深入理解Python单元测试unittest的使用示例
2017/11/18 Python
Windows 7下Python Web环境搭建图文教程
2018/03/20 Python
Python hashlib模块用法实例分析
2018/06/12 Python
python使用zip将list转为json的方法
2018/12/31 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
什么是python的自省
2020/06/21 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
为什么要用EJB
2014/04/17 面试题
上海世博会志愿者口号
2014/06/17 职场文书
招标授权委托书样本
2014/09/23 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
python 使用pandas读取csv文件的方法
2022/12/24 Python