HTMLページで質問に答えることができるMySQLデータベースを備えたDjangoアプリがあります。回答は、AJAX 呼び出しを介してサーバーに送信されます。これらの呼び出しは、さまざまな JavaScript イベントによって開始され、多くの場合、1 つの応答に対して複数回発生する可能性があります。これが発生すると、1 つの回答に対する複数の保存要求がサーバーに送信されます。
回答の重複を避けるために、各回答には、最初に保存されたときに生成されるクライアント側 ID があります - client_id
. サーバー側で新しい回答を作成する前に、Django アプリはまず DB をチェックして、そのような回答がclient_id
存在するかどうかを確認します。その場合、2 番目の保存リクエストは、新しい回答を作成する代わりに回答を更新します。
Chrome では、テキスト入力フィールドがフォーカスされているときに、ユーザーが Chrome ウィンドウの外側をクリックすると、2 つの保存リクエストが次々に発生します。サーバーは両方を受信します。client_id
例として、が 71であるとしましょう。
最初のリクエストは DB をチェックし、client_id
71 の回答が存在しないことを確認します。新しい回答を作成し、DB に保存します。ブレークポイントを使用してデバッグしていますが、現時点では、外部の MySQL データベース ビューアーで実際に回答が保存されていることがわかります。私のIDEでは、実行するAnswer.objects.filter(client_id=71)
と答えも得られます。デバッガーを続行させます。
すぐに、2 番目の AJAX 保存応答要求に対して 2 番目のブレークポイントが発生します。今、奇妙なことが起こります。IDE で実行するAnswer.objects.filter(client_id=71)
と、答えが表示されません。私の外部ツールは、答えがそこにあることを確認します。したがって、私のコードは新しい回答を作成して保存します。IDEで実行するAnswer.objects.filter(client_id=71)
と、2つの答えが表示されclient_id
ます。
DB接続またはMySQLは、ビューを一定に保つために何らかの時間ベースの方法を使用していると推測していますが、ここで問題が発生しています。DB の状態をリアルタイムで把握したいと考えています。
私はトランザクション管理を使用していないので、Django は auto_commit を実行する必要があります。
実際にDBにあるデータを考慮して、DB接続自体に「リフレッシュ」または「リセット」するように指示するにはどうすればよいですか?