【问题标题】:How to receive POST data in django如何在 django 中接收 POST 数据
【发布时间】:2011-11-26 06:43:44
【问题描述】:

我一直在尝试将支付网关集成到我的 django 网站中。 我无法从支付网关获取响应数据。

支付网关有 php 的示例文档,如下所示:

$ErrorTx = isset($_POST['Error']) ? $_POST['Error'] : '';               //Error Number
$ErrorResult = isset($_POST['ErrorText']) ? $_POST['ErrorText'] : '';   //Error message
$payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : '';     //Payment Id

在输入卡详细信息等后支付网关重定向到的 url 视图中,我正在检查它是否是 GET if request.method == "GET",然后将请求传递给函数。当我调试请求时,我可以看到一个空的查询字典。如果我尝试类似 res = request.GET['paymentid'] 的操作,我会收到一条错误消息,提示没有名为 paymentid 的密钥。

我是否遗漏了一些明显的东西?我对 django 还是很陌生,所以我确定我做错了什么。

【问题讨论】:

  • 如果正在发布,那么方法将是“POST”。
  • 是的,但是 if request.method == "GET" 返回 true def pgreturn_hdfcerror(request): #process hdfc error request getLogger().debug("pg return hdfc error") if request.method == "GET": return handleHdfcResponse(request, 1)
  • 那应该是什么哔哔声?
  • 非常抱歉,这里还在学习如何格式化内容。换行符对我来说仍然是个谜。只是想说 request.method 是 GET。
  • 您无法在 GET 中接收 POST 数据。

标签: django http post payment-gateway


【解决方案1】:

如果paymentid 不在GET 数据中,res = request.GET['paymentid'] 将引发KeyError

您的示例 php 代码检查 paymentid 是否在 POST 数据中,否则将 $payID 设置为 '':

$payID = isset($_POST['paymentid']) ? $_POST['paymentid'] : ''

python 中的等价物是使用带有默认参数的get() 方法:

payment_id = request.POST.get('payment_id', '')

调试时,这是我在response.GET: <QueryDict: {}>request.POST: <QueryDict: {}>看到的

问题似乎不是访问 POST 数据,而是没有 POST 数据。你是怎么调试的?您使用的是浏览器,还是访问您页面的支付网关?如果您分享您的观点会很有帮助。

一旦您设法将一些帖子数据提交到您的页面,将示例 php 转换为 python 应该不会太棘手。

【讨论】:

  • 我以为也没有发布数据,但支付网关的人让我非常悲痛,因为他们最终一切都很好,以至于我确信这是我做错了。我正在使用浏览器进行调试。支付网关只重定向到我的页面。将数据发送到我的 php 和 django 页面时,支付网关代码是否必须不同?他们说他们支持 php 等,但不支持 django。
  • 您确定他们发布到正确的网址吗?例如,如果他们发送到/callback(没有尾部斜杠),则请求可能会被定向到/callback/,POST 数据将会丢失。
【解决方案2】:

您应该有权访问请求对象上的 POST 字典。

【讨论】:

  • 它本身不是字典,而是QueryDict,一种不同类型的映射。
  • @kafuchau 在调试时,这是我在响应中看到的。GET:, POST: 你是什么意思'有权访问'?还有其他方法我应该尝试访问数据吗?
  • 您应该检查request.POST QueryDict,而不是response.POST
  • 抱歉,打错了。我正在检查请求。在 GET 和 POST 中,它绝对是一个空查询字典。唯一有价值的是COOKIES。 :S
猜你喜欢
  • 2014-07-26
  • 2022-12-06
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
  • 2017-01-20
  • 2023-04-07
相关资源
最近更新 更多