在Django中从request.get保存图像

4

所以,我正在尝试使用request.get从网络上获取图像并将其保存到Django数据库中。这段代码如下所示,是我尝试的步骤:

我的模型(只有需要的部分,不是全部)

class Pistol(models.Model):
    gun_id = models.CharField(max_length=255)
    manufacturer = models.CharField(max_length=255, blank=True)
    model = models.CharField(max_length=255, blank=True)
    image = models.ImageField(upload_to='img/inventory', blank=True)

我的代码(我是在终端中编写的,所以可能会有些杂乱无章)

import request

r = requests.get('http://media.server.theshootingwarehouse.com/small/2451.jpg')
item = Pistol(gun_id="1", price=400, image="1.jpg")
item.image.save('1.jpg',r.content)

然后我收到了以下错误信息

AttributeError: 'bytes' object has no attribute 'read' 

注意,我正在使用 python3 进行工作。


这可能会对你有所帮助 https://docs.djangoproject.com/en/1.8/topics/files/#file-storage - Gocht
1
你可能想查看这个答案。希望能对你有所帮助! :) - jlnabais
1
你可能想将图像保存到临时文件中,然后将其附加到模型实例。 - coolharsh55
request != requests - C14L
1个回答

1

我为Python3创建了一个管理命令,希望它能对您有所帮助。

import requests
from django.core.files.base import ContentFile
from django.core.management.base import BaseCommand, CommandError
from app.models import MyModel


class Command(BaseCommand):
    help = 'save images to MyModel table'


   def handle(self, *args, **options):
     for model in MyModel.objects.all():
        url = 'url_path_to_image'
        r = requests.get(url)
        if r.status_code == 200:
            data = r.content
            filename = url.split('/')[-1]
            model.image.save(filename, ContentFile(data))
            model.save()
            print(model.pk)
    self.stdout.write(self.style.SUCCESS('Successfully saved MyModel images'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接