Как десериализовать данные в кодировке base64 и использовать их с DRF - PullRequest
0 голосов
/ 27 мая 2019

Моя цель - создать конечную точку, которая получает строку, декодированную в base64.Это основано на примере

Мой входной JSON выглядит следующим образом:

{
    "encoded_data": "a2F0aWUsIGpvaG5zLCBrYXRpZUBnbWFpbC5jb20KdG9tbXksbGVlLHRvbW15QGdtYWlsLmNvbQ=="
}

Я попытался реализовать его следующим образом, но в итоге получаю следующее сообщение об ошибке:

JSON parse error - Expecting value: line 1 column 1 (char 0) 

Похоже, я перепутал концепции.Очень нужна помощь по этому вопросу:

class UsersFileUpload(APIView):
    #parser_classes = (MultiPartParser,)

    def post(self, request):
        stream = base64.b64decode(request.data['encoded_data'])

        stream = io.BytesIO(stream)
        data = JSONParser().parse(stream) 
        serializer = UsersSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

1 Ответ

1 голос
/ 28 мая 2019

Не думаю, что вы правильно декодируете свой текст, вам не нужно использовать BytesIO.

Вам следует decode строка байтов, возвращенная из b64decode, а затем передать ее JSONParser.

b64decoded_data = base64.b64decode(request.data['encoded_data']).decode('UTF-8')
data = JSONParser().parse(b64decoded_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...