我正在尝试从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脚本中添加它。
答案 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”参数包含内容,并会相应地设置标题。