美文网首页程序员python热爱者
Django中Mongodb数据库上传图片的问题(实例)

Django中Mongodb数据库上传图片的问题(实例)

作者: 零_WYF | 来源:发表于2018-01-31 19:33 被阅读252次

1.问题概述

在利用mongodb作为Django项目的数据库时,上传图片会用到:
mongoengine.ImageField()这个方法定义图片属性,
但是由于这个方法并没有像在使用mysql数据库时的:
models.ImageField('图片', upload_to='photos', blank=True)方法,
而直接使用又会报出如下错误:
AttributeError: 'InMemoryUploadedFile' object has no attribute 'grid_id'
因此在查了大量资料后,我这里找到了比较好的代替方案
PS:有知道mongoengine.ImageField()方法正确食用机巧的大神,求指点

2.解决方案

保存图片到指定文件夹==>将图片路径保存到数据库
也就是自己手动写出保存文件和和保存文件路径的代码(自己动手丰衣足食)

3.示例

这里是一个上传头像以及在网页中显示图像的示例

models.py

head_img = mongoengine.StringField(max_length=100, default="/static/blog/images/head_image/heike.ico")
image.png

views.py

 head_img = request.FILES["head_img"]

# 保存图片文件到本地磁盘
# with open(str(head_img), "wb") as f:
#     f.write(head_img)
img = Image.open(head_img)
img_name = str(head_img).replace("/", "_")
img_path = "blog/static/blog/images/head_image/" + login_username + "_" + img_name
img.save(img_path)
# 用于保存到数据库的地址,为了调用做出改动
img_path_save = "/static/blog/images/head_image/" + login_username + "_" + img_name

models.User.objects.filter(username=login_username).update(head_img=img_path_save)
image.png

templates

return render(request, "blog/index.html", {"login_user": login_user})

<img class="head_img_self" src="{{ login_user.head_img }}" alt="">
image.png

相关文章

网友评论

    本文标题:Django中Mongodb数据库上传图片的问题(实例)

    本文链接:https://www.haomeiwen.com/subject/nvmlzxtx.html