2009-08-28 85 views
16

我想創建一個Django視圖中的重定向到一個外部URL與一些獲取參數附加到請求。在做了一些環顧四周的嘗試之後,似乎我遇到了一個障礙。外部django重定向POST參數

所以我的觀點看起來是這樣的

def view(request): 
    data = get.data(request) 
    if something in data: 
     return HttpResponseRedirect('example.com') 

這是據我能夠得到。我知道你在請求URL可以指定一些GET參數是這樣的:

... 
return HttpResponseRedirect('example.com?name=smith&color=brown') 

然而,因爲一些數據是敏感的,我不希望它在url中結束。由於它是外部URL,因此我無法使用接受視圖參數的redirect()快捷方式。所以祈禱告訴,如何完成這樣的任務?

編輯

已經做了一段更環顧四周,並聊起在IRC了一下,似乎是我應該做的,以保持GET參數從用戶望而卻步,包含付款信息,是請將它們作爲帖子發送。我被告知你應該可以通過使用一些JS,也可以使用jQuery。現在問題仍然存在,但現在有點複雜。怎樣才能在javascript的幫助下在django中創建帖子重定向?

第二編輯

好像我一直在誤導。 Thanx用重定向協議DR清除它。看起來我嘗試使用重定向來解決這個問題一直走錯了路。

回答

18

我建議採用以下方法。在您的Django視圖/模板返回到瀏覽器的所有參數中,您想要發佈爲隱藏表單元素。只要表單加載,JavaScript將提交(POST)表單到您想要的任何位置。

查看:

from django.shortcuts import render_to_response 

def view(request): 
    return render_to_response('test.html', { 'foo': 123, 'bar': 456 }) 

模板:

<html> 
<head> 
    <title>test</title> 
    <script type="text/javascript"> 
    function load() 
    { 
      window.document.test.submit(); 
      return; 
    } 
    </script> 
</head> 
<body onload="load()"> 
<form name="test" method="post" action="http://www.example.com"> 
    <input type="hidden" name="foo" value={{ foo }} /> 
    <input type="hidden" name="bar" value={{ bar }} /> 
</form> 
</body> 
</html> 
+0

這是一種避免重定向的巧妙方法。然而,這是JavaScript的依賴,所以需要做一個優雅的退化也。我不知道這會在實踐中有多平穩,但必須在能夠完成js帖子之前加載頁面。 – googletorp 2009-08-28 15:02:41

+0

是的,這個解決方案取決於瀏覽器中啓用的JavaScript,但這並不意味着您需要在此頁面上正確執行。在你看到你的視圖之前,你應該檢查JavaScript。所以,如果它沒有啓用,那麼用戶甚至不會得到這麼多。至於頁面的加載,取決於視圖返回的速度以及HTML的結果有多大。如果你只有幾個字段,那麼我猜測的頁面渲染將在亞秒級。重定向本身也很快,所以這種解決方案的用戶體驗與正常的重定向非常相似。 – 2009-08-28 19:06:34

+0

但是這種解決方案的安全含義是什麼?我想POST參數到付款網關。是否將敏感數據(如我的auth_id等)發送給用戶安全?沒有其他方法嗎? – sudshekhar 2016-04-09 17:08:34

9

GET參數總是進入URL,這就是GET參數的原因。

使用POST參數(不在URL中)不能重定向 - 這是對HTTP的限制,而不是Django。

+0

這是否意味着無法重定向到付款站點/窗口,而用戶無法看到所有正在發送的數據? – googletorp 2009-08-28 10:08:16

2

我不同意丹尼爾,還有周圍只有GET PARAMS重定向的HTTP限制的方式。我在想什麼是:

  1. 重定向到一個GET目的地與你想要的參數。
  2. 在GET頁面上,用您轉發的參數設置表格
  3. 自動提交表單。

這就是大多數文件下載服務所做的,有時甚至是付款頁面(貝寶等)。它確實有點難看(多一跳),但它有它自己的好處。

+0

自動提交表單。你能否詳細說明這一步?謝謝。當然是 – Clayton 2014-03-10 07:27:05

+1

。 ''' $(document).ready(function(){(「#your_form」)。submit(); }) ''' – 2014-03-10 15:02:29