从Python脚本上传图片到Django

时间:2016-10-24 14:46:50

标签: python django django-rest-framework

我正在尝试从python脚本将图像上传到Django。我尝试了一些我找到的解决方案,但都没有效果。

这是我的简化模型:

class ExampleModel(models.Model):
    address = models.CharField(
        _('address'),
        max_length=200,
        blank=True,
    )
    photo = models.ImageField(
        verbose_name='photo',
        upload_to=path_for_photo,
        null=True,
        blank=True,
        validators=[FileValidator(max_size=settings.MAX_PHOTO_SIZE,
                              allowed_mimetypes=settings.ALLOWED_CONTENT_TYPES,
                              allowed_extensions=settings.ALLOWED_EXTENSIONS),]
)

现在,我的观点是这样的:

def update(self, request, *args, **kwargs):
    instance = self.get_object()
    serializer = self.get_serializer(instance, data=request.data, partial=partial)
    serializer.is_valid(raise_exception=True)
    self.perform_update(serializer)
    return Response(serializer.data)

这是我在Python中的脚本:

with open('test.jpg', 'rb') as payload:
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    files = {
        'file': payload,
        'Content-Type': 'image/jpeg'
    }
    r = requests.put('http://localhost:8000/v1/myendpoint',
                      auth=('example@example.com', 'example'),
                      verify=False,  files=files, headers=headers)

但我不知道如何修改更新方法以更新图像。我尝试了几种方法:将其作为json发送(更改'content-type'并在requests.put的'data'参数中发送信息),将其作为InMemoryUploadedFile发送,以及我发现googleing的其他一些解决方案周围。

我从未想过从Python上传一个简单的图像会那么难!我可以在html表单中轻松地做同样的事情,但我需要从python脚本中添加它。

1 个答案:

答案 0 :(得分:2)

试试这个:

with open('test.jpg', 'rb') as payload:
    files = {
        'photo': payload,
        'Content-Type': 'image/jpeg'
    }
    r = requests.put(
        'http://localhost:8000/sendfiles/1/',
        verify=False, files=files
    )
    print(r)

请求会看到“files”参数包含内容,并会相应地设置标题。