テンプレートを確認するauth.login
と、CSRFトークンが<form>
タグ内に明示的に含まれていることがわかります。
<form method="post" action=".">
{% csrf_token %}
リクエストに応じてページがレンダリングされると、これは非表示フィールドに展開されますGET
。何かのようなもの:
<form method="post" action=".">
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='90064bf0e86edacfdb60595e3e2b8f23' />
</div>
次に、このトークンはビューに戻されPOST
、検証されます。
したがってPOST
、CSRFで保護されたビューにアクセスする前に、まずそのビューからトークンを取得する必要があります。
POST
ビューにリクエストを送信する前に、CSRFトークンが手元にあることを確認/確認できますか?csrf_exempt
または、デコレータを使用してビューのCSRF保護を無効にすることもできます。ただし、これは良い考えではないかもしれません。
アップデート
これが私の質問のポイントです。フロントエンドにdjangoテンプレートを使用していないため、フォームにトークンをタグ付けできません。フロントエンドにGWTを使用しており、投稿のフォームをレンダリングしています。
GET
ページをレンダリングする前に、すでにDjangoビューにリクエストを送信していますか?その場合、応答の内容を解析することでCSRFトークンを取得できます。
そうでない場合はGET
、ビューに対して明示的にリクエストを行い(サポートされていると想定GET
)、CSRFトークンの応答を解析する必要があります。例については、この質問を参照してください。