Django框架文件上传与自定义图片上传路径、上传文件名操作分析

 更新时间:2019年05月10日 11:46:51   作者:微信1257309054  
这篇文章主要介绍了Django框架文件上传与自定义图片上传路径、上传文件名操作,结合实例形式分析了Django框架文件上传的原理、步骤、实现方法以及图片上传时自定义上传路径、上传文件名的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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 Seaborn数据可视化高级篇

    一文带你掌握Python Seaborn数据可视化高级篇

    这篇文章主要为大家详细介绍了如何使用 Seaborn 创建复合图形,如网格图、因子图和聚类热图等,文中示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-07-07
  • Python变量和数据类型详解

    Python变量和数据类型详解

    本文主要对Python变量和数据类型进行详细介绍。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • caffe binaryproto 与 npy相互转换的实例讲解

    caffe binaryproto 与 npy相互转换的实例讲解

    今天小编就为大家分享一篇caffe binaryproto 与 npy相互转换的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python functools.lru_cache装饰器性能提升利器深入探究

    Python functools.lru_cache装饰器性能提升利器深入探究

    本文将详细介绍functools.lru_cache装饰器的原理、用法以及适当的场景,以帮助你更好地利用这一功能,它可以用来缓存函数的输出,以避免重复计算,从而显著提高程序的执行速度
    2024-01-01
  • Django显示可视化图表的实践

    Django显示可视化图表的实践

    这篇文章主要介绍了Django显示可视化图表的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • python nonlocal的用法详解

    python nonlocal的用法详解

    这篇文章主要给大家介绍了关于python nonlocal用法的相关资料,最近在python学习中遇到了nonlocal关键字但是感到困惑,于是记录nonlocal关键字用法,需要的朋友可以参考下
    2023-10-10
  • 基于Keras的扩展性使用

    基于Keras的扩展性使用

    这篇文章主要介绍了Keras的扩展性使用操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • Python对Excel进行处理的实操指南

    Python对Excel进行处理的实操指南

    这篇文章主要给大家介绍了关于Python对Excel进行处理的实操指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python利用pdfplumber实现读取PDF写入Excel

    Python利用pdfplumber实现读取PDF写入Excel

    pdfplumber专注PDF内容提取,例如文本(位置、字体及颜色等)和形状(矩形、直线、曲线),还有解析表格的功能。本文主要为大家介绍如何利用pdfplumber实现读取PDF写入Excel,需要的可以参考一下
    2022-06-06
  • Python设计模式优雅构建代码全面教程示例

    Python设计模式优雅构建代码全面教程示例

    Python作为一门多范式的编程语言,提供了丰富的设计模式应用场景,在本文中,我们将详细介绍 Python 中的各种设计模式,包括创建型、结构型和行为型模式
    2023-11-11

最新评论