[Django] CSRF 検証に失敗しました。
Djangoを使用してPostフォームを送信する際に、以下のエラーが発生しました。
Forbidden (403)
CSRF verification failed. request aborted.
理由は"Help"に明確に書かれています。
一般に、これは本物のクロスサイトリクエストフォージェリがある場合や、Django の CSRF 機構が適切に使われていない場合に起こりえます。POST フォームでは、以下のことを確認する必要があります。
*ビュー関数はテンプレートRequestContextを使用します。
* テンプレート内には、{%csrf_token%}があります。(内部ターゲットの各郵便局のフォームにあるテンプレートURLトークン。
*CsrfViewMiddlewareを使用していない場合は、ビューでcsrf_protectを使用する必要があります。
このページのヘルプセクションが表示されるのは、設定でDEBUG = Trueが設定されているためです。これをFalseに変更すると、最初のエラーメッセージのみが表示されます。CSRF_FAILURE_VIEWの設定により、このページをカスタマイズすることができます。
では、解決策を。
<スパン 1. フォーム Form に
{% csrf_token %}
2.
In the Settings
MIDDLEWARE_CLASSES add configuration: (usually there by default)
'django.middleware.csrf.CsrfViewMiddleware',
#'django.middleware.csrf.CsrfResponseMiddleware',
1.2.Xの例です。
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware,
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware,
)
3. ビューのメソッドの上に@csrf_protectアノテーションを追加します。また、Contextの代わりにRequestContextを使用します。
----------------------------------------------------------------------------------------------------------------------------------
csrf_protect
def login(request):
...
return render_to_response('index.html', context_instance=RequestContext(リクエスト) )
----------------------------------------------------------------------------------------------------------------------------------
詳細はこちら
https://docs.djangoproject.com/en/1.2/ref/contrib/csrf/
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf
拡張リーディング
django.contrib.csrf 開発用パッケージには、モジュールが1つしかありません。 ミドルウェア.py . このモジュールには、Django のミドルウェア・クラスである CsrfMiddleware CSRF保護を実装するクラスです。
設定ファイル内に 'django.contrib.csrf.middleware。 に追加します。 middleware_classes CSRF保護は、設定で有効にすることができます。ミドルウェアの設定は セッション・ミドルウェア 後 が実行されるので、リスト内の CsrfMiddleware の中に表示されなければなりません。 セッションミドルウェア 前 (レスポンスミドルウェアは前後して実行されるため)。また、レスポンスが圧縮・伸張される前に、レスポンス結果を処理する必要があるため CsrfMiddleware で設定する必要があります。 GZipミドルウェア はその後に実行されます。一度追加された ミドルウェア・クラス をセットしたら、作業終了です。
関連
-
Django リクエストボディの属性を変更する AttributeError: 属性を設定できない
-
python3 のモジュール "importlib._bootstrap" に "SourceFileLoader" という属性がない問題を解決する。
-
Python27 PILソリューションという名前のモジュールがない
-
python3.x: urllib2' という名前のモジュールがない
-
TypeError: 'numpy.ndarray' オブジェクトが呼び出し可能でないエラー処理
-
pythonフレームワーク Scrapyエラー TypeError: 'float' object is not iterable Solve
-
Logistics Regressionにおけるcoef_とintercept_の具体的な意味についてsklearnで解説します。
-
Python辞書
-
pythonのstring()モジュール
-
TypeError: Json オブジェクトは str, bytes または bytearray でなければならず、'TextIOWrapper' ではありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python error TypeError: 'bool' object is not subscriptable
-
Solve 'DataFrame' オブジェクトに 'sort' 属性がない。
-
Pythonがエラーを報告する AttributeError:'numpy.ndarray' オブジェクトに 'index' という属性がない
-
AttributeError: モジュール 'tensorflow'に属性 'placeholder' がない問題
-
python 3.3.2 エラー。urllib2' という名前のモジュールがない ソリューション
-
OSError[Errno 48]:アドレスは既に使用されています 解決方法
-
python error TypeError: 'range' object does not support item assignment, solution
-
プログラム実行中にPythonの例外が発生しました。TypeError: 'NoneType' オブジェクトは呼び出し可能ではありません。
-
ValueError: 解凍するために1つ以上の値が必要です。
-
Pythonソケットプログラミング [WinError 10061] ターゲットコンピュータがアクティブに拒否しているため、接続できない。