У меня есть файл views.py с конечной точкой, подобной этой:
def endpoint(request):
if request.method == "POST":
body = request.body.decode('utf-8')
body = json.loads(body)
param1 = request.GET.get('param1','default1')
param2 = request.GET.get('param2','default2')
У моего urls.py есть этот urlpattern:
url(r'^endpoint$', views.endpoint, name="endpoint")
Проблема в том, что если я отправляю запросы одним из следующих способов, он работает нормально:
curl -X POST http://localhost:8000/endpoint -d @data.json
curl -X POST http://localhost:8000/endpoint?param1=val1 -d @data.json
curl -X POST http://localhost:8000/endpoint?param2=val2 -d @data.json
Но если я отправлю запрос с обоими параметрами:
curl -X POST http://localhost:8000/endpoint?param1=val1¶m2=val2 -d @data.json
Я получаю исключение:
json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ
0)
Почему я получаю JSONDecodeError при наличии нескольких параметров? Это потому что это POST-запрос?
РЕДАКТИРОВАТЬ: мне нужно использовать файл data.json , потому что тело запроса довольно большое.
я тоже пробовал с меньшим json
curl -X POST http://localhost:8000/endpoint?param1=val1¶m2=val2 -d "{"a": "b"}"
Для отладки я вставил это в начало кода:
print("request body:")
print(request.body)
Я получаю это в терминале:
тело запроса:
б ''
Кажется, Django даже не получает тело запроса