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批量下载图片的三种方法
Apr 22 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
Jul 12 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
Python爬取网站图片并保存的实现示例
Feb 26 Python
Python 调用C++封装的进一步探索交流
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
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
laravel学习教程之存取器
2016/07/30 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
JS将指定的某个字符全部转换为其他字符实例代码
2020/10/13 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python 实现屏幕录制示例
2019/12/23 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
毕业生求职简历的自我评价
2013/10/23 职场文书
教师实习自我鉴定
2013/12/11 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
优秀教师获奖感言
2014/01/31 职场文书
庆七一活动总结
2014/08/27 职场文书
考试作弊检讨书
2014/10/21 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
Python列表的索引与切片
2022/04/07 Python