2012-09-26 24 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。