在金字塔中,GET发送请求可以通过创建URL来完成:
@view_config(route_name="test")
def test(request):
return HTTPFound("http://test.com/redirect_to_another_test?a=1")
但似乎HTTPFound
无法通过POST执行此操作,那么我该怎么做呢?
有没有人有这个想法?谢谢!
答案 0 :(得分:6)
您无法在Pyramid或任何其他服务器端框架或语言中执行此操作。
您的示例代码未显示表单提交,代码显示HTTP重定向。它指示浏览器访问另一个URL,换句话说,告诉浏览器重新提交请求。
这个Stack Overflow问题讨论了同样的概念,尽管在ASP而不是Python中 - Response.Redirect with POST instead of Get?
如果您要通过GET或POST在金字塔中“提交请求”,则必须使用urllib2
,requests
或类似的库。在这些情况下,库将使Pyramid服务器充当请求的“提交者”。
如果你想让User / web-broswer通过POST提交请求,你必须做一些花哨的步法/技巧才能让浏览器这样做。
实现这一目标的可能方法包括:
您不能以任何服务器端语言告诉浏览器通过POST重新提交请求。浏览器不能那样工作。
您还应该知道“大多数浏览器”通常会解释通过GET获取的任何重定向请求 - 即使原始文件是POST。这不是规范 - 某些重定向代码应该保持POST一个POST - 但浏览器不遵循所有规范。还没有HTTP状态代码或命令来有目的地从GET切换到POST。