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实现图像几何变换
Jul 06 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
基于ID3决策树算法的实现(Python版)
May 31 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
Jan 24 Python
Python中单例模式总结
Feb 20 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
python设计tcp数据包协议类的例子
Jul 23 Python
解决python执行较大excel文件openpyxl慢问题
May 15 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
解析coreseek for sphinx的使用
2013/06/21 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
UI Events 用户界面事件
2012/06/27 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
python多线程http下载实现示例
2013/12/30 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
python通过post提交数据的方法
2015/05/06 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python 通过 socket 发送文件的实例代码
2018/08/14 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
《草原》教学反思
2014/02/15 职场文书
诚信考试倡议书
2014/04/15 职场文书
教师求职信范文
2014/05/24 职场文书
图书室标语
2014/06/21 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
公务员年度个人总结
2015/02/12 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
Python实现列表拼接和去重的三种方式
2021/07/02 Python