2017-03-23 6 views
0

私はDjango 1.9を使用していますDjangoは複数のサブミットを防止します

私は送信ボタンで複数回クリックするユーザの保護を作成しようとしています。

私はフォームの一意のトークンを作成しました。フォームを送信すると、デコレータチェックで同じトークンを持つセッション変数がありますか。理論的には、実際にはうまくいきません。私がクリックした場合の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

それは、私の意見から、あなたのアプローチでは、クライアントが応答を得るまで、セッション変数がサーバー側で設定されているので、ユーザーは複数の送信を送信することができます(クライアントはwaitiではありません)。応答のためのng)。

+0

私はサーバー側の保護をしたいと思います – user43506

関連する問題