Django阻止多次提交

时间:2017-03-23 08:53:20

标签: django django-forms django-templates

我正在使用Django 1.9

我正在尝试创建用户在提交按钮上多次单击的保护。

我做了什么我为表单创建了一个唯一的标记;当您提交表单时,装饰器检查您是否具有相同标记的会话变量。理论上应该在实践中工作没有。如果我点击10次将获得5-6个新条目

这是代码

我的观点:

   @form_token_check
   def new(request, **kwargs):
    if request.method == "POST" and kwargs['form_token']:
        ====write to DB=====

我的装饰者:

def form_token_check(func):
  def inner(request, *args, **kwargs):
    kwargs['form_token'] = False

    if request.method == "POST":
        new_form_token = request.POST.get('form-token', '')

        if 'form-token' in request.session:
            old_form_token = request.session['form-token']

            if new_form_token != old_form_token:
                kwargs['form_token'] = True
                request.session['form-token'] = new_form_token
        else:
            kwargs['form_token'] = True
            request.session['mlvr-form-token'] = new_form_token

    return func(request, *args, **kwargs)

return inner

1 个答案:

答案 0 :(得分:0)

从我的观点来看,在客户端(javascript,jquery等)做防止是好的。因为,在你的方法中,用户仍然可以发送多个提交,因为会话变量只在服务器端设置,直到客户端得到响应(客户不等待响应。)