2017-10-27 3 views
2

2番目のサブミット重複要求を処理する方法サーバーの遅れのために最初のサブミットがまだ完了していないときに、ユーザーがページをリフレッシュしようとした場合。Djangoで重複したフォームの提出を処理する方法は?

  • 複数の送信を避けるためにクライアント側の送信を無効にするボタン。
  • とは扱わポスト/リダイレクト/フォーム後のパターンが成功ビュー私は両方がうまく処理されていると信じて

にリダイレクト提出取得します。

class SomeView(View): 
    def post(self, request, *args, **kwargs): 
    if form.is_valid() 
     if request_exists(request): 
     # here I can raise the exception also 
     # But How I redirect the customer to sucess page 
     # If 1st submission got success response. 
     else: 
     # here I have called internal api to get/post some data. 
     # user refreshes before this call has completed. 
     ... 
     # once getting respose its ALWAYS redirect to new page 
     return HttpResponseRedirect('/thanks/') 

しかし、ケースを処理する方法API呼び出しからの応答を取得することからの遅延。最初の提出が完了するまで延期する必要があります。それから私は感謝のページにユーザーを送る必要があります。

+1

解決策は[こちら](https://stackoverflow.com/a/35083287/4628154)に記載されています。 API呼び出し時間が長い場合、またはビュー内のジョブが別のオフラインタスクでトリガーされ、待っているメッセージで新しいページをできるだけ早くリダイレ​​クトします。 – ramganesh

答えて

0

これはPython経由で可能ですが、非常に複雑です。あなたの目標を達成する方法が簡単です。ユーザーJQueryだけで、ユーザーがクリックするとそのボタンを無効にします。そうすれば、ユーザーは2回クリックすることはできません。あなたはビューのフォームを持っているテンプレートでは、

、次のスクリプト(あなたのニーズに合わせて調整)を追加:

$(document).ready(function(){ 
    var myButton = $('#my_button_id'); // your button ID here 
    myButton.on('click', function(){ 
     myButton.prop('disabled', true); 
    }); 
}; 

jQueryを使っての、あなたもそう、スピナーにボタン名をchagneすることができますそれはロードされているように見えます。私はそのユーザーのFontAwesome(http://fontawesome.io/icon/spinner/)です。

+0

はい、これは動作しますが、ここで問題は、ブラウザの更新から重複した送信を防ぐ方法です。 ** JSから送信ボタン**を無効にする、** Post/Reedirect/Get **の両方を表示する – ramganesh

関連する問題