Внешний django редирект с параметрами POST - PullRequest
17 голосов
/ 28 августа 2009

Я пытаюсь создать перенаправление в представлении Django на внешний URL с некоторыми параметрами get, прикрепленными к запросу. После нескольких осмотров и попыток, кажется, я попал в блокпост.

Так что мой взгляд выглядит примерно так

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. Вопрос все еще остается, хотя немного более сложным сейчас. Как можно было бы создать редирект поста в django с помощью javascript?

2-е редактирование

Похоже, меня дезинформировали. Спасибо за разъяснение этого с протоколами перенаправления DR. Похоже, я шел по неверному пути, пытаясь использовать редирект для решения этой проблемы.

Ответы [ 3 ]

19 голосов
/ 28 августа 2009

Я предлагаю следующий подход. В вашем представлении / шаблоне 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>
9 голосов
/ 28 августа 2009

Параметры GET всегда идут в URL, вот что делает их параметрами GET.

Невозможно перенаправить, используя параметры POST (которые не указываются в URL) - это ограничение HTTP, а не Django.

2 голосов
/ 26 ноября 2010

Я не согласен с Дэниелом, есть способ обойти ограничение HTTP перенаправления только с get params. то, о чем я думаю:

  1. Перенаправить на пункт назначения GET с нужными параметрами.
  2. На странице GET настройте форму с параметрами, которые вы перенаправили
  3. Авто отправить форму.

Это то, что делают большинство сервисов загрузки файлов, а иногда даже страницы оплаты (Paypal и тому подобное). это действительно немного некрасиво (еще 1 прыжок), но имеет свои преимущества.

...