2009-08-28 5 views
16

요청에 일부 get 매개 변수가 첨부 된 외부 URL에 대한 장고보기의 리디렉션을 만들려고합니다. 주변을 둘러보고 약간의 시도를 한 후에 도로 블록을 밟은 것 같습니다.POST 매개 변수가있는 외부 django 리디렉션

그래서 내보기 이것은 지금까지의 내가 얻을 수있었습니다 같습니다이

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이기 때문에 view 매개 변수를 허용하는 redirect() 단축키를 사용할 수 없습니다. 그런기도가 어떻게 그런 일을 성취합니까?

편집, 몇 가지 더 둘러보고 수행하는 데, 그리고 IRC에서 조금 담소를 나눴다 한 후

, 그것이 내가 무엇을해야하는지, 지불 정보를 포함하는, 멀리 사용자의 GET 매개 변수를 유지하는 것으로 보인다입니다 그들을 대신 우편으로 보내십시오. 나는 당신이 일부 JS뿐만 아니라 아마도 jQuery를 사용하여 그것을 할 수 있어야한다고 들었다. 문제는 지금도 조금 더 복잡하지만 여전히 남아 있습니다. 어떻게 하나 javascript의 도움으로 장고에서 게시물 리디렉션을 만드는거야? 내가 잘못 알고있다처럼

2 편집

보인다. Thanx는 리디렉션 프로토콜 DR을 지우고 있습니다. 이 문제를 해결하기 위해 리디렉션을 시도 할 때 잘못된 경로를 따라 간 것처럼 보입니다.

답변

18

다음 접근 방식을 제안합니다. 장고보기/템플릿에서 숨겨진 양식 요소로 게시하려는 모든 매개 변수가있는 브라우저로 양식을 반환하십시오. 폼이로드 되 자마자 자바 스크립트는 원하는 곳으로 (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

리디렉션을 피하는 것이 영리한 방법입니다. 그러나, 이것은 자바 스크립트에 의존적이기 때문에 우아한 성능 저하도 필요합니다. js 게시물을 수행 할 수 있기 전에 페이지를로드해야하지만 이것이 실제로 얼마나 원활하게되는지 궁금합니다. – googletorp

+0

예이 해결 방법은 브라우저에서 JavaScript가 활성화되어 있는지 여부에 따라 다르지만이 페이지에서 올바르게 수행해야한다는 의미는 아닙니다. 보기 전에 자바 스크립트를 확인해야합니다. 그래서 그것이 가능하지 않다면 사용자는 심지어 이것을 얻지 못할 것입니다. 페이지 로딩에 관해서는,보기가 얼마나 빨리 반환되는지, 결과 HTML이 얼마나 큰지에 달려 있습니다. 만약 당신이 오직 두 개의 필드를 가지고 있다면, 추측하고있는 페이지의 렌더링은 1 초 미만의 시간이 될 것입니다. 리디렉션 자체도 빠르기 때문에이 솔루션을 사용한 사용자 환경은 일반적인 리디렉션과 매우 유사합니다. –

+0

그런 해결책이 보안에 미치는 영향은 무엇입니까? 지불 게이트웨이에 매개 변수를 POST하고 싶습니다. 내 auth_id 등 중요한 데이터를 사용자에게 안전하게 보내고 있습니까? 다른 방법이 없습니까? – sudshekhar

9

GET 매개 변수는 항상 URL에 들어가므로 GET 매개 변수가됩니다.

POST 매개 변수 (URL에 포함되지 않음)를 사용하여 리디렉션 할 수 없습니다. 이는 Django가 아니라 HTTP의 제한 사항입니다.

+0

사용자가 전송되는 모든 데이터를 볼 수 없어도 결제 사이트/창으로 리디렉션 할 수 없다는 뜻입니까? – googletorp

2

내가 다니엘에 동의하지 않는, 가져 오기 PARAMS 만 리디렉션의 HTTP 제한 주위에 방법이있다. 내가 생각하고있는 것은 :

  1. 원하는 매개 변수로 GET 대상으로 리디렉션합니다.
  2. GET 페이지에서 전달한 매개 변수가있는 양식을 설정하십시오.
  3. 양식을 자동 제출하십시오.

대부분의 파일 다운로드 서비스와 때로는 지불 페이지 (Paypal 등)입니다. 그것은 실제로 조금 못생긴 (1 더 많은 홉)이지만 자신의 이익이 있습니다.

+0

자동으로 양식을 제출하십시오. 그 단계를 자세히 설명해 주시겠습니까? 감사. 물론 – Clayton

+1

. ''' $ (document) .ready (function() { $ ("# your_form") 제출(); }) ''' –