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上基于Markov链生成伪随机文本的教程
Apr 17 Python
深入解析Python中的WSGI接口
May 11 Python
Python计算字符宽度的方法
Jun 14 Python
Python 自动化表单提交实例代码
Jun 08 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
python命名空间(namespace)简单介绍
Aug 10 Python
解决flask接口返回的内容中文乱码的问题
Apr 03 Python
pyspark 随机森林的实现
Apr 24 Python
Django配置跨域并开发测试接口
Nov 04 Python
python openssl模块安装及用法
Dec 06 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
python实现爬虫下载漫画示例
2014/02/16 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python从零开始创建区块链
2018/03/06 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python中必要的名词解释
2019/11/20 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
优秀班干部事迹材料
2014/01/26 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
个人租房协议书范本
2014/09/30 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
结婚堵门保证书
2015/05/08 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书