Django:文件上传三要素,图片上传、存储与显示

图片属于位图文件,也是一种文件

一:文件上传 文件上传三要素: 1.提交方式 :必须是post 。 2.编码方式:enctype 必须是 multipart/form-data。 3.标签类型:必须是 file 类型。

二:例子: (1)html页面部分 如:

其中<img src=’’{%static image%}’’ alt=’’ ‘’> 用于显示图片 (2)图片上传、存储与显示的视图模块

#上传文件:
def lishan02(request):
    img_name = 
    if request.method == POST:
        img_obj = request.FILES[picture]  # 获取上传文件对象
        img_name = request.FILES[picture].name  # 获取上传文件的字符串类型名称
        path = static/ + img_name
        with open(path, mode=wb) as f:
            for content in img_obj.chunks():  # 读取上传文件的内容
                f.write(content)    # 存储图像文件
    return render(request, app01/lishan02.html, {image: img_name})

其中要注意的是: 1:获取文件对象是用 获取只有一张图或一个文件:img_obj = request.FILES[‘picture’] 获取上传多张图片:userfiles = request.FILES.getlist(‘userfiles’) 2:区分图片对象与正确的字符串类型图片名称;因为图片在django中属于对象,图片对象取出来需要加 .name(由于django内模块编写原因),区别于一般表模型 3:path = ‘static/’ + img_name 和 with open(path, mode=‘wb’) as f: 表示存储在static文件下 4:读取上传图片的内容 for content in img_obj.chunks(): 用图片对象.chunks 5:因为html页面已经导入 static ({%static image%}),故显示图片文件时,路径要去掉static,故此例传输数据使用image而不用path 6:模型中使用:ImageField() , ImageField会将路径封装成一个对象,

三:进阶:电商后台多图上传设计路径名称 保存 代码(部分)

#注意上传字段使用 FILES.getlist() 来获取 多张图片
        userfiles = request.FILES.getlist(userfiles)  # 商品缩略图 FILES
 #循环遍历读取每张图保存在images下 --->枚举  :enumerate
        for index, image_obj in enumerate(userfiles):
            # 1:保存图片
            # 苹果_0_(可加时间戳).jpg,苹果_1_(可加时间戳).jpg,...
            # 1.2.3.4jpg --> jpg
            name = image_obj.name.rsplit(., 1)[1]
            path = static/seller/images/{}_{}.{}.format(goods_name, index, name)
            with open(path, mode=wb) as f:
                for content in image_obj.chunks():
                    f.write(content)

利用enumerate 枚举来创造序号(相当于下标)

经验分享 程序员 微信小程序 职场和发展