【问题标题】:Submitting 2 forms at once一次提交2个表格
【发布时间】:2012-01-11 11:48:37
【问题描述】:

我必须同时提交两个表单,而且我不需要 javascript。所以我认为我可以将表格发布给自己,完成我的工作,然后将其发布给第三方支付提供商。这是为了让订单出现在我们的数据存储中。该手册说明了如何通过 HTTP POST 提交表单,但我不知道如何将用户的浏览器定向到此页面。有办法吗?而不是直接将表单发布给第三方,我想这样做:

  def post(self):
     import urllib
     #do my work
     params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
     f = urllib.urlopen("http://www.thirdparty.com/cgi-bin/query", params)
     #direct the user to the reponse page but how?

它可以提交表单,但用户必须被带到页面。有没有办法做到这一点?

感谢您的帮助

【问题讨论】:

    标签: python forms google-app-engine python-2.7


    【解决方案1】:

    你可以这样做:

    获取发布表单,在您的服务器上执行操作,然后返回一个重定向页面,其中包含具有相同参数但对远程目标执行操作的表单。

    然后,你可以用小js自动提交表单,给用户类似“Not redirecting? click here”。

    所以它没有像你预期的那样工作,它也使用了 js,但是我没有找到更好的方法来处理这个工作。希望这可以在任何方面有所帮助。

    【讨论】:

    • 我认为它会起作用。整个事情是向第三方(如贝宝)提交表单,我需要“拦截”并将订单保存到我的数据存储区。谢谢你的回答。
    • 执行此操作的常用方法是先创建订单,然后将用户重定向到订单摘要页面(他可以在该页面上查看/保存/打印),然后将标准的 Paypal 按钮放在那里.
    • 感谢您的帮助。我现在只是想知道我应该如何知道用户是否在重定向页面取消了订单。我可以有一个批处理作业来清理它,但更好的是只有实际放置在第三方提供商处的订单也会写入我的数据存储区。
    • 所以您必须保存所有订单的状态,至少是“未付款”和“已付款”状态:)
    • 如需进一步详细说明此用例,请随时查看我的新问题,我已进一步了解了实施stackoverflow.com/questions/9075541/…谢谢!
    【解决方案2】:

    您可以使用 307 进行重定向,这会保留所有 POST 参数(您需要确保您的 servlet 使用的 POST 参数与您的远程服务器使用的相同)。

    self.response.set_status(307)
    self.response.headers['Location'] = "http://www.thirdparty.com/cgi-bin/query"
    

    但是,并非所有浏览器都正确实现 307。见这里:Response.Redirect with POST instead of Get?

    那个响应是旧的,所以现在可能更多的浏览器可以正确处理 307。

    【讨论】:

      猜你喜欢
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多