2017-08-08 4 views
0

Ich versuche, Bild auf meine Django-Website durch Django Rest Framework API zu laden. aber ich erhalte diesen FehlerDjango Rest Framework: Upload Bild API

{ "Detail": "Mehrteiliger Form Parse-Fehler - Ungültige Grenze in mehrteiliger: Keine"}

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) 

Serializer .py

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

modell.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

Wie genau laden Sie Ihr Bild hoch? Über ein JS-Framework? –

+0

Ich benutze HTTPie - Kommandozeile HTTP-Client, und es funktioniert gut für Update-Text, Bild lesen, aber nicht Bild hochladen –

Antwort

1

ich verschwendet viel Zeit curl mit und httpie. Der beste und einfachste Weg ist die Verwendung python requests.

Ich habe diesen Weg zu Kommandozeilen-Upload Bild mit Django Rest Framework gefunden.

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 

Wenn Sie 201 erhalten, bedeutet Sie fertig.

Verwandte Themen