django-图片上传详解

本文详细介绍了在Django中进行图片上传的步骤,包括前提设置、后台管理页面上传图片和用户自定义页面上传图片的实现,同时讲解了Django处理文件上传的机制。

一、前提设置

1.配置上传文件的保存目录
新建举例:
本文是在静态文件夹目录下建立了一个叫media的文件夹储存上传的图片文件,如图:
在这里插入图片描述

2.配置上传文件的路径
在setting.py文件中添加上传图片文件的路径:

MEDIA_ROOT = os.path.join(BASE_DIR,"static/media")

如图:
在这里插入图片描述

二、后台管理页面上传图片

  1. 设计模型类,在数据库中记录上传文件的操作
class PicTest(models.Model):
    """创建上传文件的数据库文件"""
    gpic = models.ImageField(upload_to="booktest") # 设置文件的上传目录

    def __str__(self):
        """返回名字"""
        return self.gpic
    class Meta:
        db_table = "pictest"

注: upload_to后面跟的路径是除去setting.py文件中设置的文件路径后的路径。
迁移生成表:
1)python manage.py makemigrations
2)python manage.py migrate
3) 查看表的结构:desc pictest
在这里插入图片描述
4) 在admin.py中注册模型类:

# 注册上传图片模型类
admin.site.register(PicTest)
  1. 登录后台管理页面查看:
    在这里插入图片描述
    在这里插入图片描述
    添加查看效果:
    在这里插入图片描述
    在这里插入图片描述

三、用户自定义页面上传图片

  1. 定义用户上传图片的页面并显示,是一个自定义表单
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义图片上传</title>
</head>
<body>
上传文件时必须是post上传,编码方式:enctype必须是:multipart/form-data这个类型<br/>
<br/>
<form method="post" enctype="multipart/form-data" action="/uploal_action/" >
{#    取消csrf_token的防护#}
    {% csrf_token %}
    <input type="file" name="pic"><br/>
    <input type="submit" value="上传"><br/>
</form>
</body>
</html>
  1. 定义接收上传文件的视图函数。
    request对象有一个FILES的属性,类似于字典通过request.FILE可以获取上传的处理对象
["django.core.files.uploadhandler.MemoryFileUploadHandler", "django.core.files.uploadhandler.TemporaryFileUploadHandler"]

MemoryFileUploadHandler和TemporaryFileUploadHandler定义了Django的默认文件上传行为:将小文件读取到内存中,大文件放置在磁盘中。(小文件:小于2.5M,超过2.5M的视为大文件).

  1. 获取上传文件类的对象:a = request.FILES[‘name’]
    这个类的对象有一个方法为:a.name:获取文件的名字
    还有一个a.chunks():每次返回这个文件的一块内容。
    更多方法请看参考资料

  2. 编写视图中的代码:(views.py)

# /uploal_action/
def uploal_action(request):
    """保存上传文件"""
    # 1.获取上传的文件
    pic = request.FILES['pic']
    # 2.创建文件
    save_path = '%s/booktest/%s'%(settings.MEDIA_ROOT,pic.name)
    with  open(save_path, 'wb') as f :
        # 获取上传文件的内容并写到创建文件中
        # pic.chunks():分块的返回文件
        for content in pic.chunks():
            f.write(content)
    # 3.将保存操作写到数据库中
    PicTest.objects.create(gpic='booktest/%s'%pic.name)
    # 4.返回响应
    return HttpResponse('ok')
  1. 配置路由文件:(urls.py)
    路由文件中添加如下:
    path('update_pic/',views.update_pic), # 上传图片
    path('uploal_action/',views.uploal_action), # 保存上传文件
  1. 效果显示;
    在这里插入图片描述
    在这里插入图片描述
    上传返回响应:
    在这里插入图片描述

四、参考资料

文件上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值