django POST [合法性]

时间:2012-12-30 01:16:13

标签: django

假设我有一个Web应用程序,在每个会话中显示2个随机按钮,我希望用户单击1按钮或另一个按钮。如果单击一个按钮,我想增加该按钮的分数。但是,用户无法控制每次显示的2个按钮,并且有数千个可能的按钮。

如果我创建一个视图来增加按钮,我怎么能确定用户不会通过浏览器手动转到该视图。

我的想法是你需要创建一个表单并让用户POST到某个地址,但是你怎么知道用户不只是通过AJAX发送一个帖子请求来增加按钮并且用户实际收到了带有2个按钮的随机会话中的那个按钮。

我如何在Django中处理这个文档,详细说明Django如何特别支持这个?

编辑:或者你必须为每个按钮选择会话创建一个唯一的会话ID,并检查每个按钮点击唯一的会话ID。

1 个答案:

答案 0 :(得分:0)

创建会话变量以跟踪他们看到的按钮,例如:

def button_display_view(request):
    # ...lots of cool logic
    session['buttons_shown'] = [button_1_primary_key, button_2_primary_key]
    return response

然后,在按钮单击视图中,确保单击的按钮位于显示的按钮列表中。用户将对会话变量一无所知,也无法对其进行编辑,就像他/她在使用会话变量来跟踪身份验证时不能进行编辑一样。

如果您正在构建多变量测试系统(甚至是AB测试系统),那么可能需要查看this MVT app的想法。