Django req.POST всегда возвращает False - PullRequest
0 голосов
/ 26 февраля 2019

Я тестирую веб-крючок на судовой станции и не могу получить данные из отправляемого им POST-запроса.

Их webhook docs говорят, что их POST-запрос будет содержать тело, которое выглядит следующим образом:

{"resource_url":"https://ssapiX.shipstation.com/orders?storeID=123456&importBatch=1ab23c4d-12ab-1abc-a1bc-a12b12cdabcd","resource_type":"ORDER_NOTIFY"}

Чтобы отладить проблему, я зашел в Firefox и попробовалотправить это: Firefox POST request

И получил тот же результат;req.method = 'POST' и req.POST = False

Просмотр контроллера для myNgrokAddress.ngrok.io/bot/shipstation:

@csrf_exempt
def vc(req):
    print(req.META) //this works but it looks like meta-data for my browser and not from shipstation
    print(req.POST.get('resource_url')) //prints false
    print(req.POST) //prints false


    return HttpResponse('')

Когда я перехожу к localhost:4040 (инспектор ngrok), появляется тело POST, поэтому что-то должнобыть неправильно настроен на моем сервере django.

Я установил ALLOWED_HOSTS = ['myNgrokAdress.ngrok.io', 'localhost'] в файле settings.py.Есть ли что-то еще, что мне нужно сделать?

Что мне здесь не хватает?

1 Ответ

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

Проблема с методом req.POST.

Из Django docs :

HttpRequest.POST:

Словарь-подобный объект, содержащий все заданные параметры HTTP POST, при условии, чтозапрос содержит данные формы.См. Документацию QueryDict ниже.Если вам нужно получить доступ к необработанным или неформальным данным, размещенным в запросе, используйте это вместо атрибута HttpRequest.body .

Поскольку тип отправляемых данных - неформальные данные, вам нужно будет использовать req.body вместо.

...