代码之家  ›  专栏  ›  技术社区  ›  googletorp

外部Django重定向和post参数

  •  16
  • googletorp  · 技术社区  · 16 年前

    我试图在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参数远离包含付款信息的用户,而是将他们作为post发送。有人告诉我,您应该也可以使用一些JS来完成这项工作,可能是jquery。问题仍然存在,尽管现在有点复杂。在Javascript的帮助下,如何在django中创建后重定向?

    第二编辑

    好像我被误导了。thanx用于清除重定向协议,dr.看起来我在尝试使用重定向来解决这个问题时走错了路。

    3 回复  |  直到 14 年前
        1
  •  19
  •   Sergey Golovchenko    16 年前

    我建议采用以下方法。在Django视图/模板中,将表单返回到浏览器,其中包含所有要作为隐藏表单元素发布的参数。一旦表单加载,javascript就会将表单提交(发布)到您想要的地方。

    观点:

    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
  •  9
  •   Daniel Roseman    16 年前

    获取参数总是在URL中,这就是使它们获取参数的原因。

    不可能使用post参数重定向(URL中没有这个参数)——这是HTTP的限制,而不是Django。

        3
  •  2
  •   Elad Meidar    14 年前

    我不同意丹尼尔的观点,有一种方法可以绕过HTTP限制,只使用get-params重定向。我想的是:

    1. 重定向到包含所需参数的get目标。
    2. 在“获取”页上,使用转发的参数设置表单
    3. 自动提交表单。

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

    推荐文章