2017-08-08 20 views
0

django rest framework apiを使用して、私のdjangoウェブサイトに画像をアップロードしようとしています。Django Restフレームワーク:画像アップロードAPI

views.py

class UploadPhotoViewSet(APIView): 
    parser_classes = (parsers.MultiPartParser, parsers.FormParser) 

    def get(self, request, format=None): 
     model_object = Photo.objects.all() 
     serializer = PhotoSerializer(model_object, many=True) 
     return Response(serializer.data) 

    def post(self, request, format=None): 
     serializer = PhotoSerializer(data=request.data) 

     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

シリアライザ: - : は、しかし、私はこのエラー

{ "なしマルチパートの無効な境界マルチパートフォーム解析エラー" "詳細" を}取得しています.py

class PhotoSerializer(serializers.ModelSerializer): 
    thumbnail = serializers.ImageField(use_url=True) 
    source = serializers.ImageField(use_url=True) 
    class Meta: 
     model = Photo 
     fields = '__all__' 

model.py

class Photo(models.Model): 
    type = models.CharField(max_length=100, default='photo', editable=False) 
    project = models.ForeignKey(Project, on_delete=models.CASCADE) 
    title = models.CharField(max_length=100) 
    description = models.TextField() 
    category = models.CharField(max_length=255) 

    def upload_thumb_dir(self, filename): 
     path = '/media/{}/photos/thumbs/{}'.format(self.project.id, filename) 
     return path 
    thumbnail = models.ImageField(upload_to=upload_thumb_dir, default='/default/photo.png', blank=True) 

    def upload_photo_dir(self, filename): 
     path = '/media/{}/photos/{}'.format(self.project.id, filename) 
     return path 
    source = models.ImageField(upload_to=upload_photo_dir) 

    def __str__(self): 
     return self.title 

enter image description here

+0

画像をどのくらい正確にアップロードしますか?いくつかのJSフレームワークを介して? –

+0

私はHTTPieコマンドラインHTTPクライアントを使用していますが、アップデートテキストは正常に動作していますが、イメージを読み込みますがイメージはアップロードされません –

答えて

1

私はカールとhttpieを使用して多くの時間を無駄にしました。 最も簡単な方法はpython requestsです。

Django Rest Frameworkを使用してコマンドラインの画像をアップロードする方法が見つかりました。

import requests 
files = {'thumb': open('D:/thumb.jpg', 'rb'), 'preview': open('D:/preview.jpg', 'rb')} 
r = requests.put('/path/to/your/django/rest/api', data={'key': value, 'key2': 'value2'}, files=files) 
print r.status_code 

もしあなたが201を取得したら、完了したことを意味します。

関連する問題