我正在测试造船厂的Webhook,但似乎无法从他们发送的POST请求中获取数据。
他们的网络钩子docs说,他们的POST请求将包含一个如下所示的正文:
{"resource_url":"https://ssapiX.shipstation.com/orders?storeID=123456&importBatch=1ab23c4d-12ab-1abc-a1bc-a12b12cdabcd","resource_type":"ORDER_NOTIFY"}
得到相同的结果; 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']
。还有什么需要做的吗?
我在这里想念什么?
答案 0 :(得分:0)
问题出在req.POST
方法上。
来自Django docs:
HttpRequest.POST:
类似于字典的对象,包含所有给定的HTTP POST参数,条件是请求中包含表单数据。请参阅下面的QueryDict文档。如果您需要访问请求中发布的原始或非格式数据,请改为通过 HttpRequest.body 属性进行访问。
由于发送的数据类型是非格式数据,因此您将需要使用req.body
。