Django链接到页面而不将数据放入URL

时间:2015-01-12 18:49:44

标签: django

所以我有一个HTML页面,其中包含一个表格,其中包含某个模型的详细信息。每行包含不同对象的详细信息。我也有一个按钮的单元格。

现在,我想要的是让用户能够点击按钮,它应该将他们带到他们点击的特定用户的相应页面。我现在可以这样做的方法是创建一个URL,该URL带有一个user_id参数和一个视图,以将其重定向到模板。然后可以将此URL添加到按钮。但是,我不希望在URL中显示user_id(在Inspect Element中显示是正常的(如在行ID中)。

这很匆忙,很抱歉。我怎么能这样做?

有没有办法在不在网址中提供任何信息的情况下执行此操作?

谢谢!

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是从POST而不是GET发送用户ID以获取用户信息,当用户单击按钮时,您提交一个包含user_id的隐藏表单(您将相应地更新)并传递它到Django。在此POST调用中,您将根据您期望包含用户ID的POST参数为用户连接页面呈现。

您可以通过以下方式阅读请求中的帖子参数:

request.POST.get('user_id')

这种方法的缺点是您无法共享某个用户的链接,因为该链接只包含获取参数。

答案 1 :(得分:0)

也许您可以重构您的应用程序以在前端使用某种SPA框架。通过这种方式,您可以加载当前页面上的任何内容,如果您不想要,网址永远不会更改。请查看AngularJSDurandal的示例。两者都适用于Django。

您也可以使用POST而不是GET解决问题,但我认为这不是一个非常优雅的解决方案,因为只有在您向服务器发送数据时才会使用POST请求。

答案 2 :(得分:0)

如果您担心安全问题,我不认为保留user_id密码会有效,但如果由于其他原因您必须这样做,请将其置于会话中并重定向到没有任何参数的用户页面。

将表放在表单中,并将id存储在每行按钮的属性中:

<button class="mybutton" data-id="{{ my_object.id }}">view</button>

在表单底部放置一个隐藏字段:

<input type="hidden" id="user_id" name="user_id" />

使用Javascript:

$("table .mybutton").click(function(e) {
    e.preventDefault();
    $("#user_id").val($(this).attr("data-id"));
    $("#my_form").submit();
});

在您的表格视图中:

if request.method == "POST":
    request.session["user_id"] = request.POST.get('user_id')
    return redirect("user_page")

在您的详细信息视图中:

user_id = request.session["user_id"]