使用外部POST操作验证Django表单

时间:2015-08-12 14:03:53

标签: javascript ajax django post paypal

我有一个Django表单,它将表单数据发送到外部源(更准确地说,它是PayPal付款表单)。用户输入产品价格,点击按钮,POST请求发送到PayPal,触发正常的付款流程。

现在,我想使用OTP(如Google身份验证器)验证每笔付款。

如何实现验证?我想到了几个场景,但没有一个真的令人满意:

  • 我应该先将请求发送到我的网站,验证OTP,然后通过POST请求将用户重定向到PayPal站点,并附带请求吗? 问题: POST请求并不意味着重定向,我不知道,如何在django中实现它。
  • 我应该编写JavaScript代码,它向我的网站发送ajax请求,并在成功时“激活”表单吗? 问题:更聪明的用户只需从浏览器控制台激活表单,而无需发送ajax请求。有没有人知道JavaScript中的某种激活技巧,这不是“hackable”

我很高兴听到您提供更多解决方案或一些建议,如何在没有上述问题的情况下实现上述解决方案。

编辑 - 我的解决方案到目前为止:
我做了一个工作并将表格分成两部分。第一种形式检查OTP并将数据发送到我的内部django视图。它还会创建一个带有生成发票的模型实例,然后可以在PayPal IPN例程中进行检查。第二种形式是PayPal付款表单,它将POST请求发送给PayPal。您可以在以下Github-Gist中找到简化代码:

https://gist.github.com/BloodyD/2cd15f38d0f666cf3a73

1 个答案:

答案 0 :(得分:0)

第一种方法 - POST后的正常重定向:

我不知道为什么你认为POST请求后不应该有任何重定向?在django中它始终发生,没有在向数据库添加内容后直接刷新每个页面将触发再次添加它。

要将用户重定向到正确的PayPal页面,您可以在使用有效表单数据提交表单时发送HttpResponseRedirect而不是正常响应。如果没有,请显示一些错误消息。

第二个解决方案:使用javascript。

您可以在AJAX响应中发送重定向到(paypal url)的网址,这样用户就无法绕过此功能。简单地把一些由AJAX提交的表单,如果它返回重定向的URL,只需重定向用户。如果没有,则显示错误消息。