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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
python实现n个数中选出m个数的方法
Nov 13 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
Django choices下拉列表绑定实例
Mar 13 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
详解Anaconda 的安装教程
Sep 23 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
梳理总结Python开发中需要摒弃的18个坏习惯
Jan 22 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/11/05 PHP
详解PHP的Yii框架中扩展的安装与使用
2016/04/01 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
js分解url参数(面向对象-极简主义法应用)
2012/08/09 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
Vue快速实现通用表单验证的方法
2020/02/24 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
vue使用openlayers实现移动点动画
2020/09/24 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Django开发中复选框用法示例
2018/03/20 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python绘制多个子图的实例
2019/07/07 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python 弧度与角度互转实例
2020/04/15 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
python实现图像外边界跟踪操作
2020/07/13 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
类的返射机制中的包及核心类
2016/09/12 面试题
青春无悔演讲稿
2014/05/08 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书