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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
python文本数据相似度的度量
Mar 12 Python
Python入门必须知道的11个知识点
Mar 21 Python
对Python中9种生成新对象的方法总结
May 23 Python
tensorflow实现简单的卷积网络
May 24 Python
python存储16bit和32bit图像的实例
Dec 05 Python
Python数据类型之Dict字典实例详解
May 07 Python
python定时任务 sched模块用法实例
Nov 04 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
python属于跨平台语言码
Jun 09 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 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP实现通用alert函数的方法
2015/03/11 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery移除或禁用html元素点击事件常用方法小结
2017/02/10 Javascript
JS中的作用域链
2017/03/01 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
利用node.js开发cli的完整步骤
2020/12/29 Javascript
python聊天程序实例代码分享
2013/11/18 Python
Python使用django获取用户IP地址的方法
2015/05/11 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
python实现手机通讯录搜索功能
2018/02/22 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python 多线程其他属性以及继承Thread类详解
2019/08/28 Python
JNI的定义
2012/11/25 面试题
一些Solaris面试题
2013/03/22 面试题
客户经理竞聘演讲稿
2014/05/15 职场文书
宣传工作经验材料
2014/06/02 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
转正申请报告格式
2015/05/15 职场文书
初中物理教学反思
2016/02/19 职场文书