如何在金字塔中通过POST提交请求?

Han*_*Sun 1 python web-frameworks pyramid

在Pyramid中,通过GET发送请求可以通过创建URL来完成,如下所示:

@view_config(route_name="test")
def test(request):
    return HTTPFound("http://test.com/redirect_to_another_test?a=1")
Run Code Online (Sandbox Code Playgroud)

但似乎HTTPFoundPOST无法做到这一点,那我该怎么做呢?有没有人有这个想法?谢谢!

Jon*_*sco 6

您无法在Pyramid或任何其他服务器端框架或语言中执行此操作.

您的示例代码未显示表单提交,代码显示HTTP重定向.它指示浏览器访问另一个URL,换句话说,告诉浏览器重新提交请求.

这个Stack Overflow问题讨论了同样的概念,虽然在ASP而不是Python - Response.Redirect与POST而不是Get?

如果你要在金字塔通过GET或POST"提交请求",你将不得不使用像一个图书馆urllib2,requests或类似的.在这些情况下,库将使Pyramid服务器充当请求的"提交者".

如果你想让User/web-broswer通过POST提交请求,你必须做一些花哨的步法/技巧来让浏览器这样做.

实现这一目标的可能方法包括:

  • 使用JavaScript AJAX表单提交,并通过JSON返回错误代码或指令,告诉您的JavaScript库通过POST重新提交相同的表单.
  • 将用户重定向到填写了表单数据的GET页面(通过GET参数),并使用javascript通过POST onload重新提交表单

您不能以任何服务器端语言告诉浏览器通过POST重新提交请求.浏览器不能那样工作.

您还应该知道"大多数浏览器"通常会解释通过GET获取的任何重定向请求 - 即使原始文件是POST.这不是规范 - 某些重定向代码应该保持POST一个POST - 但浏览器不遵循所有规范.还没有HTTP状态代码或命令有目的地从GET切换到POST.