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获取本机外网ip的方法
Apr 15 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python性能提升之延迟初始化
Dec 04 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
python实现网页自动签到功能
Jan 21 Python
Python 最强编辑器详细使用指南(PyCharm )
Sep 16 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
Python自动化xpath实现自动抢票抢货
Sep 19 Python
如何基于Python pygame实现动画跑马灯
Nov 18 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
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
php 数据结构之链表队列
2017/10/17 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
js实现的星星评分功能函数
2015/12/09 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
深入理解javascript的getTime()方法
2017/02/16 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
js中对象和面向对象与Json介绍
2019/01/21 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现指定字符串补全空格的方法
2015/04/30 Python
django如何连接已存在数据的数据库
2018/08/14 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Python持续监听文件变化代码实例
2020/07/22 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
Servlet面试题库
2015/07/18 面试题
化工专业大学生职业生涯规划书
2014/01/14 职场文书
环保建议书作文
2014/03/12 职场文书
销售经理岗位职责
2014/03/16 职场文书
产品质量承诺书范文
2014/03/27 职场文书
报关报检委托书
2014/04/08 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫