Django req.POST始终返回False

时间:2019-02-26 17:33:17

标签: python django python-3.x webhooks ngrok

我正在测试造船厂的Webhook,但似乎无法从他们发送的POST请求中获取数据。

他们的网络钩子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服务器上错误地配置了某些内容。

我在settings.py中设置了ALLOWED_HOSTS = ['myNgrokAdress.ngrok.io', 'localhost']。还有什么需要做的吗?

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

问题出在req.POST方法上。

来自Django docs

  

HttpRequest.POST:

     

类似于字典的对象,包含所有给定的HTTP POST参数,条件是请求中包含表单数据。请参阅下面的QueryDict文档。如果您需要访问请求中发布的原始或非格式数据,请改为通过 HttpRequest.body 属性进行访问。

由于发送的数据类型是非格式数据,因此您将需要使用req.body