我正在使用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
答案 0 :(得分:0)
从我的观点来看,在客户端(javascript,jquery等)做防止是好的。因为,在你的方法中,用户仍然可以发送多个提交,因为会话变量只在服务器端设置,直到客户端得到响应(客户不等待响应。)