Django не может загрузить Json в теле запроса POST, если в URL передано более 1 параметра - PullRequest
1 голос
/ 06 мая 2019

У меня есть файл 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&param2=val2 -d @data.json

Я получаю исключение:

json.decoder.JSONDecodeError: Ожидаемое значение: строка 1, столбец 1 (символ 0)

Почему я получаю JSONDecodeError при наличии нескольких параметров? Это потому что это POST-запрос?

РЕДАКТИРОВАТЬ: мне нужно использовать файл data.json , потому что тело запроса довольно большое.

я тоже пробовал с меньшим json

curl -X POST http://localhost:8000/endpoint?param1=val1&param2=val2 -d "{"a": "b"}"

Для отладки я вставил это в начало кода:

print("request body:")
print(request.body)

Я получаю это в терминале:

тело запроса: б ''

Кажется, Django даже не получает тело запроса

1 Ответ

2 голосов
/ 06 мая 2019

в командной строке & означает команду запуска в фоновом режиме, попробуйте ввести URL в двойные кавычки: "http://localhost:8000/endpoint?param1=val1&param2=val2"

curl -X POST <b>"</b><a href="http://localhost:8000/endpoint?param1=val1&param2=val2" rel="nofollow noreferrer">http://localhost:8000/endpoint?param1=val1&param2=val2</a><b>"</b> -d @data.json

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