Невозможно декодировать тело запроса POST в бэкэнде: поднять MultiValueDictKeyError (ключ) - PullRequest
0 голосов
/ 23 февраля 2019

Я отправляю данные JSON в теле запроса POST в бэкэнд Python (Django).В бэкэнде я получаю это содержание:

body_unicode = request.body.decode('utf-8')
print(body_unicode)

{"holdingTime": 0, "asma40": 49, "asma60": 18, "температура": 9, "видимость": 9999, "windIntensity": 1.5, "направление ветра": "ВРБ", "airportDepDelay": 8, "csvData": "NUM, AIRLINE_ARR_ICAO, ПРОБУДИТЕСЬ, SIBT, SOBT, PLANNED_TURNAROUND, DISTANCE_FROM_ORIGIN, DISTANCE_TO_TARGET \ п1, АЕО, Н, 2016-01-01 04: 05: 00,2016-01-01 14: 10: 00,605,9920,67,5776,89 \ n2, AEA, H, 2016-01-01 04: 25: 00,2016-01-01 06:30:00,125,0,10060.80,483.93 \ n3, AVA, H, 2016-01-01 05: 05: 00,2016-01-01 07: 05: 00,120.0,8033.86,8033.86 \ n4, IBE, H, 2016-01-01 05: 20: 00,2016-01-01 10: 40: 00,320.0,6000.00,8507.73 \ n5, IBE, H, 2016-01-01 05: 25: 00,2016-01-01 10: 50: 00,325.0,6698.42,6698.42 \ n6, IBE, H, 2016-01-01 05: 30: 00,2016-01-01 08: 10: 00,160.0,10699.06,1246.30 \ n7, IBE, H, 2016-01-01 05:30:00, 2016-01-01 11: 00: 00,330.0,9081,35,8033,86 \ n8, IBE, H, 2016-01-01 05: 40: 00,2016-01-01 11: 35: 00,355.0,5776.89,8749.87 \ n9,ANE, M, 2016-01-01 05: 50: 00,2016-01-01 14: 50: 00,540.0,284.73,284.73 \ n10, ETD, H, 2016-01-01 06: 35: 00,2016-01-01 08: 00: 00,85,0,5647.10,5647.10 \ n11, IBS, M, 2016-01-01 06: 50: 00,2016-01-01 08: 00: 00,70.0,547.36,1460.92 \ n12, IBE, H, 2016-01-01 06: 50: 00,2016-01-01 10: 35: 00,225.0,6763.16,6763.16 \ n13, IBE, H, 2016-01-01 06: 50: 00,2016-01-01 10: 50: 00,240.0,7120.40,7120.40 \ n14, IBE, H, 2016-01-01 06: 50: 00,2016-01-01 10: 55: 00,245.0,7010.08,6000.00 \ n15, QTR, H, 2016-01-01 06:55:00, 2016-01-01 08: 30: 00,95.0,5338,52,5338,52 \ n16, IBS, M, 2016-01-01 07: 00: 00,2016-01-01 07: 45: 00,45.0,485.52,1721.09 \ n17, IBS, M, 2016-01-01 07: 00: 00,2016-01-01 07: 45: 00,45.0,394.98,429.37 \ n18, ELY, M, 2016-01-01 07:05: 00,2016-01-01 08: 30: 00,85.0,3550.48,3550.48 \ n19, AAL, H, 2016-01-01 07: 05: 00,2016-01-01 12: 05: 00,300,0,5925,61,5925.61 \ n20, TVF, M, 2016-01-01 07: 30: 00,2016-01-01 08: 10: 00,40.0,1030.31,1030.31 \ n "}

Но еслиЯ делаю это, я получаю сообщение об ошибке:

body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
print(body)

Ошибка:

Внутренняя ошибка сервера: / batch_predict Traceback (последний вызов был последним): Файл "/ Users / tuter / anaconda3/lib/python3.6/site-packages/django/core/handlers/exception.py ", строка 34, яn внутренний ответ = get_response (запрос) Файл "/Users/tuter/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py", строка 126, в _get_response response = self.process_exception_by_middleware (e, запрос) Файл "/Users/tuter/anaconda3/lib/python3.6/site-packages/django/core/handlers/base.py", строка 124, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs) Файл "/Users/tuter/anaconda3/lib/python3.6/site-packages/django/views/decorators/csrf.py", строка 54, в wrapped_view возвращает файл view_func (* args, ** kwargs) "/ Users/tuter/Desktop/test/backend/views.py ", строка 192, в файле batch_predict_endpoint body = json.loads (body_unicode)" /Users/tuter/anaconda3/lib/python3.6/json/init .py ", строка 354, в загрузках возвращает файл _default_decoder.decode (s)" /Users/tuter/anaconda3/lib/python3.6/json/decoder.py ", строка 339, в decode obj, end = self.raw_decode (s, idx = _w (s, 0) .end ()) Файл "/Users/tuter/anaconda3/lib/python3.6/json/decoder.py", строка 357, вraw_decode повысить JSONDecodeError («Ожидаемое значение», s, err.value) из None json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)

Обновление:

Если я сделаю это:

sample_data = request.POST['csvData']

print("sample_data",sample_data)

, то появится эта ошибка:

    sample_data = request.POST['csvData']
  File "/Users/tuter/anaconda3/lib/python3.6/site-packages/django/utils/datastructures.py", line 79, in __getitem__
    raise MultiValueDictKeyError(key)

1 Ответ

0 голосов
/ 23 февраля 2019

В django вам не нужно загружать тело запроса пакетом json, вы можете получить данные из запроса с помощью ключа json:

def my_view(request):
   sample_data = request.POST['sample_key']
   # statements
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...