2016-03-31 2 views
1

Я работаю над своим приложением (гибридом), а на странице регистрации я должен отправить все данные в API, созданный с помощью Django Rest Framework.Сохранить изображение в base64 django rest framework

Проблема в том, что единственный способ отправить изображение профиля - base64 закодированная строка. Но мне нужен образ в jpg на моем сервере. Кто-нибудь знает, как я могу это сделать?

Это мой апи Вид:

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) 

И это мой Serializer:

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

Есть ли способ, чтобы взять base64 и создать JPG?

+0

Я нашел решение для себя со следующим кодом на стеке - [http://stackoverflow.com/](http://stackoverflow.com/a/6781529/795622) – mexekanez

+1

'try' /' except KeyError: 's немного переборщит. Вы можете просто использовать метод 'get()' и указать пустую строку как значение по умолчанию: 'name = data.get ('name', '')'. – BlackJack

+0

Спасибо, я не знал =) –

ответ

2

Вы можете просто использовать base64.decodestring:

from base64 import decodestring 

fh = open("imageToSave.jpeg", "wb") 
fh.write(str(base64_string).decode('base64')) # or fh.write(decodestring(base64_string)) 
fh.close() 
Смежные вопросы