Django 图片上传

1、django上传图片,主要是将图片存储在内存或者临时文件中。所以,上传图片,就是将图片的路径存储在数据库中。

1、图片大小不大于2.5M时,存储在内存。

2、图片大小大于2.5M时,存储在临时文件中。

2、上传图片步骤。

1)设置上传文件的目录。

        在settings.py文件下,设置上传文件的目录。(与设置静态目录的方法一致)

 

 2)在数据库中创建数据表,其中有关图片的字段设置为varchar,用于存储图片路径。(使用的数据库为mysql)

        设置存储图片路径的字段为pic。

3)编写models.py文件,将图片路径的字段设置为models.ImageField类型。将上传的图片存储到media下的pic目录下。

pic = models.ImageField(upload_to='pic/',verbose_name=u'图片地址')

4)html前端页面显示上传图标。

<div class="form-group">
	<label for="pic">产品的图片</label>
	<form>
		<input id="image-uploadify" name="pic" type="file" accept=".xlsx,.xls,image/*,.doc,audio/*,.docx,video/*,.ppt,.pptx,.txt,.pdf" multiple>
	</form>
</div>

 5)编写views.py文件,django通过request.FILES.get('')方法获取前端的图片对象。

def insertProductData(request):
    mod = Product.objects  # 获取Drug模型的Model操作对象
    # 获取上传文件的处理对象
    pic = request.FILES.get('pic')
    try:
        # 创建插入
        mod.create(
            name=request.POST.get("name"),
            code = request.POST.get("code"),
            pic=pic,
            purchase_price = request.POST.get("purchase_price"),
            sole_price=request.POST.get("sole_price"),
        )
        context = {'info': '添加成功!'}
    except Exception as res:
        print(res)
        context = {'info': res}
    return JsonResponse({"msg": context})

 输出request.FILES.get('pic'),可得到图片的名称。

6)ajax将表单数据插入到数据库。由于需要长传图片信息,enctype需要为multipart/form-data,所以用表单来初始化。

$(document).on("click", "#add_save", function () {
    if (confirm("确认保存数据吗?")) {
        // 用表单来初始化
        var formData=new FormData();
        formData.append('name',$("#name").val());
        formData.append('purchase_price',$("#purchase_price").val());
        formData.append('code',$("#code").val());
        formData.append('sole_price',$("#sole_price").val());
        formData.append('pic',$("input[name='pic']")[0].files[0]);
        $.ajax({
            url: "/product/insertProductData/",
            type: 'post',
            async: true,
            // enctype:"multipart/form-data",
            data: formData, 
            contentType:false,// jQuery不要去设置Content-Type请求头
            processData:false,// jQuery不要去处理发送的数据
            success: function (result) {
                alert(result.msg.info);
                //1.关闭模态框
                $("#addModel").modal("hide");

                }
            });
      } else {
        return false;
      }
});

 【注】使用表单序列化( $("form").serialize() ),无法上传图片信息,request.FILES获取为空。

 

如何将数据库的图片显示到html页面上:django 调用数据库图片的路径并在html显示_weixin_43235307的博客-CSDN博客

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值