Django REST Framework MultiPartParser разбирает JSON как строку
Я делаю функциональное представление на основе django, где запрос содержит некоторый JSON и файл. Использование DRF's MultiPartParser разбирает JSON-секцию запроса как строку. Что я могу сделать, чтобы исправить это?
Вот вид:
from rest_framework.response import Response
from rest_framework.request import Request
from rest_framework.parsers import MultiPartParser
@api_view(['POST'])
@parser_classes([MultiPartParser])
def import_files(request: Request) -> Response:
data = request.data
print(type(data['json']))
return Response("Success", status=200)
и вот запрос клиента с использованием python requests
:
import requests
import json
multipart_payload = [
('json', (None, json.dumps(payload), 'application/json')),
('file', ('test.xlsx', open('test.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'))
]
put_response = requests.post(endpoint + "feature/", files=multipart_payload)
print(put_response.json())
Я пробовал добавить JSONParser
к декоратору @parser_classes
, но это не помогло.
Если кто-то сталкивался с подобной проблемой, любая помощь была бы очень кстати, спасибо
MultiPartParser
используется для обработки multipart/form-data
, поэтому JSONParser
, который обрабатывает application/json
, может не работать.
Вы можете использовать следующее:-
import json
@api_view(['POST'])
@parser_classes([MultiPartParser])
def import_files(request: Request) -> Response:
data = request.data
if 'json' not in data:
return Response("Failure", status=400)
json_data = json.loads(data['json'])
print(type(json_data)) #Should give 'class <dict>'
return Response("Success", status=200)