Django API выдает значение исключения: объект типа ParserError не JSON сериализуемый, не входит в блок try - PullRequest
0 голосов
/ 01 марта 2020

Новое в разработке API. Любая помощь или статья действительно поможет. my views.py

@api_view(["POST"])
def retrieve_base64_as_pdf(request):
    try:
        #base_64_input = request.POST.get('ImageBase64String')
        body_unicode = request.body.decode('utf-8')
        print(len(body_unicode))
        body = json.loads(body_unicode)
        print(len(body))
        base_64_input = body['ImageBase64String']
        doc_ref_id = body['DocRefID']
        #base_64_input = json.loads(request.body["ImageBase64String"])
        pdf = base64.b64decode(base_64_input)
        #build PDF
        with open(os.path.expanduser('life/lpo-test.pdf'), 'wb') as fout:
            fout.write(pdf)
            responses = single_page_extractor(file_names='life/lpo-test.pdf',client_doc_ref_id=doc_ref_id)
            # return Response(responses, safe=False)
            return Response(responses, status=status.HTTP_200_OK)

            # responses = json.responses.replace("\'", '')
            # return Response(responses, status=status.HTTP_200_OK, content_type='json')
    except ValueError as e:
    os.remove('life/lpo-test.pdf')       
    return Response(e, status=status.HTTP_400_BAD_REQUEST)

мой процесс, 1. потреблять базу 64, запустите мою логи c и выведите json.

It works 99% of the time but throws bad request at times. 
1. The json input is the same for all inputs.

сообщение об ошибке: исключение: значение исключения: Объект типа ParserError не является JSON serializable Единственная ошибка: ParserError ('Ошибка токенизации данных. C Ошибка: ожидается 1 поле в строке 3, пила 12 \ n')

1 Ответ

0 голосов
/ 01 марта 2020

Похоже на Response класс, если из django -rest-framework, и он попытается jsonify любых входных данных, которые вы ему дали.

В последней строке вы пытаетесь сериализовать объект ошибки, и поэтому у вас возникла проблема:

return Response(e, status=status.HTTP_400_BAD_REQUEST)

Попробуйте добавить ошибку в str, чтобы сделать в json -serializable :

return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)

Также проблема может быть в single_page_extractor, если он может возвращать объекты ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...