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

作者:微信1257309054 时间:2022-06-09 12:44:28 

本文实例讲述了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程序设计有所帮助。

来源:https://blog.csdn.net/lm_is_dc/article/details/80527604

标签:Django,文件上传
0
投稿

猜你喜欢

  • 跟老齐学Python之Import 模块

    2022-02-02 21:13:34
  • Python专用方法与迭代机制实例分析

    2021-09-07 22:05:22
  • Python在不同场景合并多个Excel的方法

    2021-11-03 02:52:00
  • javascript中的后退和刷新实现方法

    2023-08-23 09:36:45
  • 详解MySQL性能优化(一)

    2024-01-18 11:39:52
  • python保存字典和读取字典的实例代码

    2023-05-12 14:17:54
  • JavaScript 异步方法队列链实现代码分析

    2024-04-22 13:26:14
  • JavaScript循环遍历的24个方法,你都知道吗

    2024-04-17 09:41:18
  • 浅谈numpy 函数里面的axis参数的含义

    2023-06-04 11:23:35
  • asp程序运行速度测试

    2008-02-11 19:11:00
  • python datetime处理时间小结

    2022-11-21 01:38:15
  • Python time模块时间获取和转换方法

    2022-06-07 11:14:30
  • python实现class对象转换成json/字典的方法

    2021-11-16 00:46:34
  • 深入理解python中sort()与sorted()的区别

    2021-08-17 11:46:49
  • 在Python的Django框架中编写编译函数

    2022-01-04 16:53:34
  • 查看vue-cli脚手架的版本号和vue真实版本号及详细操作命令

    2023-07-02 17:04:20
  • PHP实现简单注册登录系统

    2024-05-02 17:34:13
  • python发qq消息轰炸虐狗好友思路详解(完整代码)

    2023-08-06 15:13:19
  • python实现控制电脑鼠标和键盘,登录QQ的方法示例

    2023-11-19 12:10:26
  • SQL server分页的四种方法思路详解(最全面教程)

    2024-01-16 20:19:52
  • asp之家 网络编程 m.aspxhome.com