18

我正在尝试在 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 中创建帖子重定向?

第二次编辑

好像我被误导了。感谢您使用重定向协议 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

我不同意丹尼尔的观点,有一种方法可以绕过 HTTP 限制,即仅使用 get 参数进行重定向。我在想的是:

  1. 使用您想要的参数重定向到 GET 目标。
  2. 在 GET 页面上,使用您转发的参数设置一个表单
  3. 自动提交表单。

这就是大多数文件下载服务所做的,有时甚至是支付页面(Paypal 等)。它确实有点难看(再跳一跳),但有它自己的好处。

于 2010-11-26T11:58:01.757 回答