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实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
Django中url的反向查询的方法
Mar 14 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
selenium3+python3环境搭建教程图解
Dec 07 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
Python PIL读取的图像发生自动旋转的实现方法
Jul 05 Python
python使用原始套接字发送二层包(链路层帧)的方法
Jul 22 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python基于机器学习预测股票交易信号
May 25 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画图实例
2014/11/05 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
javascript作用域和闭包使用详解
2014/04/25 Javascript
javascript实现的多个层切换效果通用函数实例
2015/07/06 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
JS原型链怎么理解
2016/06/27 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
python机器学习之神经网络(一)
2017/12/20 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
基于Python函数和变量名解析
2019/07/19 Python
Python创建数字列表的示例
2019/11/28 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
意大利网上药房:Farmacia 33
2020/01/27 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
学习委员自我鉴定
2014/01/13 职场文书
房屋租赁意向书
2014/04/01 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
人事任命通知书
2015/04/21 职场文书
安全温馨提示语大全
2015/07/14 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
Go语言基础知识点介绍
2021/07/04 Golang