如何使用django禁止返回或刷新

时间:2011-03-15 05:51:46

标签: python django

这是我的代码:

def to_complete(request):
    return MobileResponseRedirect('/battle/complete/')

def complete(request):
    do_something()
    return MobileResponse(html)

但这种方法无法阻止,

我在complete中做了一件重要的事情(比如在比赛中加钱)

我不希望用户刷新页面或返回父页面,

我能做什么,

感谢

2 个答案:

答案 0 :(得分:1)

一个简单的想法是使用会话变量,如下所示:

def to_complete(request):
    if request.session.has_key("complete_pending"):
        return HttpResponseForbidden()
    request.session["complete_pending"] = True
    return MobileResponseRedirect('/battle/complete/')

def complete(request):
    if not request.session.get("complete_pending", False):
        return HttpResponseForbidden()
    request.session["complete_pending"] = False
    do_something()
    return MobileResponse(html)

此方法允许用户在to_completecomplete中输入一次。如果您希望用户再次输入,只需取消设置会话变量。

答案 1 :(得分:0)

我看到几个选项:

  1. 您可以在do_something()后再次重定向:

    def complete(request):
        do_something()
        return MobileResponseRedirect('/battle/complete_msg/')
    
    def complete_msg(request):
        return MobileResponse(html)
    
  2. 如果仍然担心(特别是如果担心用户作弊系统),您应该在服务器上设置某种操作已完成操作的标志。很难说如何正确地做到这一点w / out了解更多关于你的应用程序。一个示例可能是仅允许在用户完成某些操作(例如,击败某个级别)并且记录该操作已发生的情况下发生此完整操作,以便完成操作仅对级别节拍发生一次-action。