18

リクエストにいくつかのgetパラメータを添付して、Djangoビューで外部URLへのリダイレクトを作成しようとしています。周りを見回したり、試したりした後、私は障害にぶつかったようです。

だから私の見解はこのように見えます

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でポストリダイレクトを作成するにはどうすればよいですか?

2回目の編集

私は誤解されているようです。リダイレクトプロトコルDRでそれをクリアしてくれてありがとう。この問題を解決するためにリダイレクトを使用しようとして、間違った道を進んでいるようです。

4

3 に答える 3

20

次のアプローチをお勧めします。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>
于 2009-08-28T13:53:47.103 に答える
9

GETパラメーターは常にURLに含まれるため、GETパラメーターになります。

POSTパラメータ(URLには含まれません)を使用してリダイレクトすることはできません。これはHTTPの制限であり、Djangoではありません。

于 2009-08-28T09:37:27.863 に答える
2

私は Daniel に同意しません。get params でのみリダイレクトするという HTTP の制限を回避する方法があります。私が考えているのは:

  1. 必要なパラメーターを使用して GET 宛先にリダイレクトします。
  2. GET ページで、転送したパラメーターを使用してフォームをセットアップします。
  3. フォームを自動送信します。

これは、ほとんどのファイル ダウンロード サービスや、場合によっては支払いページ (Paypal など) で行われていることです。それは確かに少し醜い (1 つ余分なホップ) ですが、独自の利点があります。

于 2010-11-26T11:58:01.757 に答える