gpt4 book ai didi

python - Django 管理员 : images in zip file and inserting each image info in a database

转载 作者:行者123 更新时间:2023-12-02 04:09:57 37 4
gpt4 key购买 nike

我想使用 Django 构建一个图片库。当然,每张图片都是一篇文章。现在,我不想单独上传每个图像。我想将它们全部压缩并上传到 Django 管理页面,也许创建某种触发器来:

  • 解压zip
  • 阅读所有图像信息
  • 将信息存储在数据库中,每个图像连续

Django 可以做到这一点吗?实现这一目标的最佳方法是什么?我将不胜感激任何形式的帮助,我对 Django 很陌生(大约 5 小时新)

最佳答案

是的,这是可能的。这是一个完全受Mezzanine启发的大致轮廓。实现了这个。

首先定义一个用于接受 zip 文件的字段:

class BaseGallery(models.Model):
zip_import = models.FileField(blank=True, upload_to=upload_to("galleries")

然后您就有了一个独立的模型,该模型通过外键连接到您的父模型。在此示例中,父模型是 BaseGallery,图像模型是 GalleryImage:

class GalleryImage(Orderable):
gallery = models.ForeignKey(Gallery, related_name="images")
file = models.ImageField(upload_to="galleries")

然后在模型的 save 方法中,您可以提取此 zip 文件并保存各个图像:

from django.core.files import ContentFile
from django.conf import settings
from zipfile import ZipFile

def save(self, delete_zip_import=True, *args, **kwargs):
"""
If a zip file is uploaded, extract any images from it and add
them to the gallery, before removing the zip file.
"""
super(BaseGallery, self).save(*args, **kwargs)
if self.zip_import:
zip_file = ZipFile(self.zip_import)
for name in zip_file.namelist():
data = zip_file.read(name)
try:
from PIL import Image
image = Image.open(BytesIO(data))
image.load()
image = Image.open(BytesIO(data))
image.verify()
except ImportError:
pass
except:
continue
name = os.path.split(name)[1]
# You now have an image which you can save
path = os.path.join(settings.MEDIA_ROOT, "galleries",
native(str(name, errors="ignore")))
saved_path = default_storage.save(path, ContentFile(data))
self.images.create(file=saved_path)
if delete_zip_import:
zip_file.close()
self.zip_import.delete(save=True)

请注意,实际保存图像的位已经被简化,如果您查看我链接到的源代码,则需要更多的技巧来处理 unicode 文件名等。

另请注意,Mezzanine 使用自己的 FileField,这与 Django 的 FileField 不同。我尝试在上面的示例中重构这一点。

关于python - Django 管理员 : images in zip file and inserting each image info in a database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234473/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com