blog新米webエンジニアによる技術ブログ。DjangoDjangoのミドルウェアにCSRFミドルウェア(django.middleware.csrf.CsrfViewMiddleware)を指定していると、csrf_tokenを渡していないPOSTメソッドは403エラーになってしまいます。外部からのアクセスを可能にしたい場合など、特定のViewのメソッドに対してはこのCSRF対策を無効にしたい場合がありますよね。その方法を調べたのでメモ。はじめに403エラーが発生する例を見てみます。HttpResponse('ok')この例では、http://localhost:8080にアクセスしボタンをクリックすると、というエラーが発生します。これを避けるためには<form>タグ内でcsrf_tokenテンプレートタグを使用します。(template.htmlのコメントアウトしている部分のコメントを外すと、エラーは表示されなくなります。)CSRF対策を無効にする方法CSRF対策のチェックを無効にするには、@csrf_exemptというデコレータを使用します。views)の場合は注意が必要です。具体的には、以下のような書き方をします。**kwargs)ポイントはcsrf_exemptデコレータはdispatchメソッドにつけるcsrf_exemptをmethod_decoratorメソッドでラップする補足クラスベースビューの場合にどうしてこのような書き方になるのか?という部分について公式ドキュメントには次のように記載されています。Django以下、ドキュメントより引用。method.日本語版ではクラスベースビューの全インスタンスをデコレートするには、クラスの定義そのものをデコレートします。メソッドにデコレータを適用することでできます。クラスメソッドは単なる関数とは違います。メソッドに関数デコレータを適用することはできません。関数デコレータをメソッドデコレータに変換する必要があります。デコレータは関数デコレータをメソッドデコレータに変換するので、これをインスタンスメソッドで使えます。一段落目はクラスベースビューのデコレータはdispatch()メソッドに適用してくださいねーということが書いてますね。同じものではないので、適用したいデコレータの変換が必要だと述べています。検証したところXXXView.as_view()という形で使っている限りでは、@method_decoratorはなくてもエラーにはなりませんでした。Pytho...タイトルの通り。Playgroundがリリースされました月別アーカイブはてなブログをはじめよう!dackdiveさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。