DjangoのCSRFエラー発生時のエラーをカスタマイズする方法

以前、「AjaxでDjangoのCSRFを有効にする方法」というメモを書きました。今回はその続きで、CSRFエラー発生時のエラーをカスタマイズする方法に関して記載します。

DjangoのCSRFエラーをそのまま使うと、403エラーが返ってきます。これは403エラー用の画面を作って使ってもいいけれども、Ajaxでリクエストしている場合などは403じゃない方がいい可能性もあります。その場合は、以下のようにカスタマイズすることができます。

  1. 「settings.py」に「CSRF_FAILURE_VIEW」という項目を追加し、値にCSRFエラー発生時の処理を記載する関数名を記載
  2. 上記で設定した関数にて、「django.http.HttpResponse」型のインスタンスを返却

「CSRF_FAILURE_VIEW」の例)

--- settings.py ---

CSRF_FAILURE_VIEW='my_app.views.error_views.csrf_failure'

この場合、「my_app/views/error_views.py」の「csrf_failure」関数が呼ばれます。 

関数の例)

from django.http import HttpResponse
from django.utils import simplejson
def csrf_failure(request, reason=""):
    res = {}
    res["error_type"] = u"CSRFError"
    return HttpResponse(simplejson.dumps(res, ensure_ascii=False),
            content_type="application/json") 

この記事が役に立った場合、シェアしていただけると励みになります!!