0

jqueryを使用してフォーム送信をajaxに変換する方法を数日間探していましたが、csrfトークンの問題が私を困惑させています。

ここにあるjavascriptスニペットを追加して問題を解決しました: https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

しかし、スタックオーバーフローにつまずいたとき、私はより簡単な答えを見つけました (最初のものではありません): Django CSRF check fails with an Ajax POST request

一部の回答では、投稿データに以下を単純に追加することを提案しています: csrfmiddlewaretoken: '{{ csrf_token }}'

しかし、これは話がうますぎるように思えます。それが簡単であるなら、なぜ django の Web サイトから長いスニペットをコピーする必要があるのでしょうか? また、静的 JS に関する返信の 1 つに簡単なコメントがあります。よくわかりません。

最も単純な解決策が最善ではない理由を説明し、実用的な例を挙げてください。

ありがとう

4

1 に答える 1

1

2 つのソリューションは、実質的にまったく同じことを行っています。csrftokenリクエストで Django に を提供します。彼らはそれをさまざまな方法で行っているだけです。

「シンプル」オプション

Django テンプレートでの単一の jQuery 呼び出しの場合、{{ csrf_token }}タグを使用して投稿データに追加する方が簡単な場合があります。ただし、複数の場所で複数の呼び出しがあるとすぐに、維持が難しくなります。

jQuery コード

一方、jQuery コード:

  • 静的 .js ファイルの 1 か所に含めることができます
  • django テンプレートである必要はありません
  • 複数のページに含めることができます
  • 個々の呼び出しを変更することなく、すべての jQuery Ajax 呼び出しで機能します
  • サードパーティの jQuery ライブラリとの連携が含まれます
  • どこでも同じなので、Django のドキュメントで簡単に共有できます

使い方

jQuery コードがさらに複雑になるのは、Django 変数にアクセスせずにブラウザーで実行されるためです。

このコードは、すべての Ajax 呼び出しに使用される jQuery イベントにアタッチすることで機能します。ブラウザーに保存されている Cookieを検索しcsrftoken、要求の種類とホストに基づいてトークンを送信するかどうかを決定し、トークンをデータHTTP headerに含める代わりにとして送信しPOSTます。

于 2012-05-15T04:12:29.893 に答える