2016-03-31 8 views
1

Ich arbeite an meiner App (hybrid) und auf der Registrierungsseite muss ich alle Daten an eine API mit Django Rest Framework senden.Bild speichern in base64 django rest framework

Das Problem ist, dass die einzige Möglichkeit, die ich das Profilbild senden kann, in Base64 codierte Zeichenfolge ist. Aber ich brauche das Bild in jpg auf meinem Server. Jeder weiß, wie kann ich das tun?

Das ist mein api Ausblick:

class CreateUserView(generics.CreateAPIView): 
    serializer_class = UserSerializer 
    permission_classes = [AllowAny] 
    queryset = User.objects.all().order_by('-date_joined') 
    def post(self, request, *args, **kwargs): 
     error = 0 
     data = request.data 

     try: 
      name = data['name'] 
     except KeyError: 
      name = "" 

     try: 
      last_name = data['last_name'] 
     except KeyError: 
      last_name = "" 

     # IMAGE IN BASE64  
     try: 
      profile_picture = data['profile_picture'] 
     except KeyError: 
      profile_picture = "" 

     try: 
      username = data['username'] 
     except KeyError: 
      username = "" 

     try: 
      created_user = User.objects.create(
       first_name = nombre, 
       last_name = last_name, 
       username = username 
      ) 

      # created_user.set_password(password) 
      created_user.save() 
      token = Token.objects.create(user=created_user) 
     except IntegrityError: 
      error = 1 

     return Response(error) 

Und das ist mein Serializer:

class UserSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = User 
     fields = ('url', 'username', 'first_name', 'last_name', 'email', 'groups') 

Gibt es eine Möglichkeit, die base64 zu nehmen und ein jpg erstellen?

+0

Ich fand Lösung für mich mit dem nächsten Code auf dem Stack - [http://stackoverflow.com/](http://stackoverflow.com/a/6781529/795622) – mexekanez

+1

Die 'try' /' außer KeyError: 's sind ein bisschen übertrieben. Sie können einfach die Methode 'get()' verwenden und die leere Zeichenfolge als Standardwert angeben: 'name = data.get ('name', '')'. – BlackJack

+0

Danke ich wusste nicht =) –

Antwort

2

Sie können einfach base64.decodestring verwenden:

from base64 import decodestring 

fh = open("imageToSave.jpeg", "wb") 
fh.write(str(base64_string).decode('base64')) # or fh.write(decodestring(base64_string)) 
fh.close()