webentwicklung-frage-antwort-db.com.de

"Post Image-Daten mit POSTMAN"

Ich versuche, POST Daten zu meiner API. Ich habe ein Modell mit einem image Feld, wo:

image = models.ImageField()

Auf meiner lokalen Box befindet sich ein Bild, das ich senden möchte. Sende ich es richtig?

{
   "id": "3", 
   "uid":"273a0d69",
   "uuid": "90",
   "image": "@/home/user/Downloads/tt.jpeg"
}
19
User_Targaryen

Auf diese Weise senden Sie keine Datei auf dem Postboten. Sie haben eine Zeichenfolge gesendet, die den Pfad Ihres Bildes darstellt, nichts weiter.

Was Sie tun sollten, ist;

  1. Nachdem Sie die Anforderungsmethode auf POST gesetzt haben, klicken Sie auf die Registerkarte 'body'.
  2. Formulardaten auswählen. In der ersten Zeile sehen Sie Textfelder mit den Namen key und value. Schreiben Sie "Bild" in den Schlüssel. Es wird ein Wertetyp angezeigt, der standardmäßig auf "Text" eingestellt ist. Mach es Datei und lade deine Datei hoch.
  3. Wählen Sie dann 'raw' und fügen Sie Ihre json-Datei ein. Ebenfalls direkt neben der binären Auswahl wird "Text" angeklickt. Machen Sie es JSON.

form-data section

raw section

Du bist bereit zu gehen.

In Ihrer Ansicht Django,

from rest_framework.views import APIView
from rest_framework.parsers import MultiPartParser
from rest_framework.decorators import parser_classes

@parser_classes((MultiPartParser, ))
class UploadFileAndJson(APIView):

    def post(self, request, format=None):
        thumbnail = request.FILES["file"]
        info = json.loads(request.data['info'])
        ...
        return HttpResponse()
46

Die akzeptierte Antwort funktioniert, wenn Sie JSON als Schlüssel/Wert-Paar im Fenster form-data Festlegen (siehe Abbildung unten).

enter image description here

Trotzdem frage ich mich, ob es eine sehr saubere Art ist, eine API zu entwerfen. Wenn es für Sie obligatorisch ist, sowohl Image als auch JSON in einem einzigen Aufruf hochzuladen, ist es möglicherweise in Ordnung, aber wenn Sie die Routen trennen könnten (eine für das Hochladen von Images, die andere für den JSON-Body mit einem geeigneten Inhaltstyp-Header), ist dies besser .

8
MarAja