如何反序列化base64编码的数据并将其与DRF一起使用

时间:2019-05-27 12:21:20

标签: python django-rest-framework base64

我的目标是提出一个获取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 个答案:

答案 0 :(得分:0)

我认为您无法正确解码文本,因此不需要使用BytesIO

您应该decode b64decode返回的字节字符串,然后将其传递给JSONParser。

b64decoded_data = base64.b64decode(request.data['encoded_data']).decode('UTF-8')
data = JSONParser().parse(b64decoded_data)