2016-10-24 23 views
3

Pythonスクリプトから画像をDjangoにアップロードしようとしています。私は見つけた解決策をいくつか試しましたが、どれもうまくいきません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=('[email protected]', 'example'), 
         verify=False, files=files, headers=headers) 

しかし、私私の更新方法を変更して画像を更新する方法を知らない私はいくつかのアプローチを試みました:jsonとして(コンテンツタイプを変更し、requests.putの 'data'パラメータに情報を送信する)、InMemoryUploadedFileとして送信してください。まわり。

Pythonの簡単な画像をアップロードするのは難しいとは思っていませんでした。私はhtml形式で同じことを簡単に行うことができますが、私はpythonスクリプトからそれを置く必要があります。

答えて

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) 

要求は、「ファイル」パラメータは、コンテンツを持っていることがわかりますし、それに応じてヘッダーを設定します。


+0

タンクは@blazaidです。私のヘッダーが問題でした。ベスト。 – mcamacho

関連する問題