2012-09-26 31 views
1

在金字塔,通过发送GET请求可以通过完成创建网址是这样的:如何通过POST在金字塔中提交请求?

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

但似乎HTTPFound不能做到这一点的POST,那我该怎么做呢? 有没有人有关于此的想法?谢谢!

+1

你想达到什么目的? HTTPFound只是将浏览器重定向到一个新的URL(请参阅http://en.wikipedia.org/wiki/HTTP_302),然后使用GET请求新的URL。如果原始请求是POST,您可以尝试使用“See Other”(http://en.wikipedia.org/wiki/HTTP_303),但在我看来,您仍尝试做一些奇怪的事情:) –

+0

我想将请求发布到URL,然后重定向到该URL,就像在页面中的POST表单一样,您可以在提交表单后转到该URL。 –

回答

6

你不能在金字塔或任何其他服务器端框架或语言中做到这一点。

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

这个堆栈溢出问题讨论了这个相同的概念,虽然在ASP而不是Python - Response.Redirect with POST instead of Get?

如果你要通过GET或POST“提交请求”的金字塔,你将不得不使用图书馆像urllib2requests,或类似的。在这些情况下,图书馆会让金字塔服务器充当请求的“提交者”。

如果你想让用户/网页浏览器通过POST提交请求,你将不得不做一些花哨的脚步/诡计,使浏览器做到这一点。

可能的方式来实现这一目标将包括:

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

你不能在任何服务器端语言,请告诉浏览器通过POST重新提交请求。浏览器不能像那样工作。

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