2018/2/2 19:07:43当前位置推荐好文程序员浏览文章

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_nameimg.save(img_path)# 用于保存到数据库的地址,为了调用做出改动img_path_save = "/static/blog/images/head_image/" + login_username + "_" + img_namemodels.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
网友评论