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 24 Python
python3 发送任意文件邮件的实例
Jan 23 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
Python iter()函数用法实例分析
Mar 17 Python
Django数据库连接丢失问题的解决方法
Dec 29 Python
Python中的heapq模块源码详析
Jan 08 Python
python调试神器PySnooper的使用
Jul 03 Python
python 命名规范知识点汇总
Feb 14 Python
Python使用struct处理二进制(pack和unpack用法)
Nov 12 Python
Django跨域请求原理及实现代码
Nov 14 Python
Jmeter调用Python脚本实现参数互相传递的实现
Jan 22 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
继续学习javascript闭包
2015/12/03 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
python中itertools模块zip_longest函数详解
2018/06/12 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
个人评价范文分享
2014/01/11 职场文书
党员实事承诺书
2014/03/26 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
全国助残日活动总结
2015/05/11 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
怎样做好公众演讲能力?
2019/08/28 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
Golang生成Excel文档的方法步骤
2021/06/09 Golang