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
网友评论