Empfange ein Base64-kodiertes Bild in Django Rest Framework und speichere es in ImageField

8

Ich muss ein Bild von einer App erhalten, und das Beste, was ich mir vorstellen kann, ist, es in ein JSON-Array zu schicken, das in Base64 kodiert ist. Das Bild ist sehr klein, daher ist mir der zusätzliche Overhead egal.

Ich habe ein Modell:

%Vor%

Und sein Serialiser:

%Vor%

Wo sollte ich den Code setzen, um das Bild zu entschlüsseln?

    
gozzilli 13.05.2013, 13:24
quelle

3 Antworten

4

Hier erfahren Sie, wie Sie eine Base64-codierte Bilddatei in einer Post-Anfrage auf der Django-basierten (drf also) API-Seite behandeln können, die sie als ImageField speichert.

Nehmen wir an, Sie haben ein Modell wie folgt:

%Vor%

Also wäre der entsprechende Serializer wie folgt:

%Vor%

Die entsprechende Ansicht kann wie folgt aussehen:

%Vor%

Hinweis In dem Serializer habe ich verwendet Implementierung von Base64ImageField im Modul vorgesehen django-extra-Feld

Um dieses Modul zu installieren, führen Sie den Befehl

aus %Vor%

Importieren Sie das Gleiche und Fertig!

Senden Sie Ihr Bild (als Post-Methode) als Base64-codierten String im JSON-Objekt zusammen mit allen anderen Daten, die Sie haben.

    
Nikhil 09.03.2017 14:22
quelle
1

Je nach Anwendungsfall gibt es zwei optimale Speicherorte:

  1. In Ihrem Serializer haben Sie die Methoden validate_X und transform_X , die Sie für Ihr Feld überschreiben können (siehe Validierungsdokumente ) und zur Konvertierung in beide Richtungen hier.

  2. Schreiben Sie Ihr eigenes benutzerdefiniertes Feld , wenn Sie die Funktion benötigen öfters. Sie müssen nur definieren, wie die Conversions in beiden Richtungen in to_native und from_native ausgeführt werden. Vielleicht erweitern Sie den ursprünglichen DRF ImageField , um das Bild zu behalten -Datenvalidierung mit PIL.

Denis Cornehl 13.03.2014 08:33
quelle
0

Probieren Sie django extra Felder aus. Verwenden Sie Base64ImageField als ein Serializer-Feld unter der Annahme natürlich, dass Sie ein ImageField in Ihren Modellen verwendet haben.

    
CuriousGeorge 26.10.2014 19:09
quelle