Внешнее перенаправление django с параметрами POST
Я пытаюсь создать перенаправление в представлении Django на внешний url с некоторыми параметрами получения, прикрепленными к запросу. После того, как я огляделся вокруг, и некоторые пытались вокруг, кажется, я ударил дорожный блок.
Итак, мой взгляд выглядит примерно так.
def view(request):
data = get.data(request)
if something in data:
return HttpResponseRedirect('example.com')
Это насколько я мог получить. Я знаю, что вы в запросе url можете указать некоторые параметры, например:
...
return HttpResponseRedirect('example.com?name=smith&color=brown')
Однако, поскольку некоторые данные чувствительны, я не хочу, чтобы он попадал в URL-адрес. Поскольку это внешний url, я не могу использовать ярлык redirect(), который принимает параметры просмотров. Так молитесь, расскажите, как выполнить такую задачу?
Edit
После того, как вы немного поглядели вокруг и немного побеседовали в IRC, кажется, что я должен делать, чтобы сохранить параметр get от пользователей, содержащий информацию о платежах, - это отправлять их вместо сообщения. Мне сказали, что вы должны это сделать, используя JS, возможно, jQuery. Вопрос до сих пор остается немного более сложным. Как можно было бы создать пост-перенаправление в django с помощью javascript?
2nd Edit
Похоже, я был дезинформирован. Thanx для устранения этого с помощью протоколов перенаправления DR. Похоже, что я пошел по неправильному пути в попытке использовать перенаправление для решения этой проблемы.
Ответы
Ответ 1
Предлагаю следующий подход. В форме просмотра/шаблона 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>
Ответ 2
Параметры GET всегда идут по URL-адресу, что делает их параметрами GET.
Невозможно перенаправить с использованием параметров POST (которые не входят в URL) - это ограничение HTTP, а не Django.
Ответ 3
Я не согласен с Даниэлем, есть способ ограничить HTTP перенаправлением только с помощью параметров get. о чем я думаю:
- Перенаправить в пункт назначения GET с нужными параметрами.
- На странице GET настройте форму с перенаправленными параметрами
- Авто отправьте форму.
Это то, что делают большинство служб загрузки файлов, а иногда и даже страницы оплаты (Paypal и т.д.). это действительно немного уродливое (еще 1 прыжок), но имеет свои преимущества.