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 15 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
基于hashlib模块--加密(详解)
Jun 21 Python
TensorFlow Session使用的两种方法小结
Jul 30 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
python程序需要编译吗
Jun 19 Python
python如何快速生成时间戳
Jul 21 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 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
javascript定义函数的方法
2010/12/06 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
js禁止查看源文件屏蔽Ctrl+u/s、F12、右键等兼容IE火狐chrome
2020/10/01 Javascript
Python version 2.7 required, which was not found in the registry
2014/08/26 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
python怎么删除缓存文件
2020/07/19 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
什么是设计模式
2012/06/17 面试题
最新自我评价范文
2013/11/16 职场文书
运动会拉拉队口号
2014/06/09 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
个人委托书范本
2014/09/13 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
倡议书作文
2015/01/19 职场文书
丧事主持词
2015/07/02 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers