我知道的一种捕获 CSRF 错误的方法是将以下设置添加到您的 settings.py:
CSRF_FAILURE_VIEW = 'app_name.views.csrf_failure'
然后在你的应用views.py上:
# This will get called when there is a csrf error.
def csrf_failure(request, reason=""):
# Do stuff here.
return HttpResponse(status=403)
您可以阅读有关 CSRF_FAILURE_VIEW here 的更多信息。
另一种方法是像这样覆盖 CsrfViewMiddleware 类:
from django.middleware.csrf import CsrfViewMiddleware
class CustomCsrfMiddleware(CsrfViewMiddleware):
def process_view(self, request, callback, callback_args, callback_kwargs):
# You can do things here before the error is raised.
return super(CustomCsrfMiddleware, self).process_view(request, callback, callback_args, callback_kwargs)
然后在您的 settings.py 中,删除旧的 csrf 中间件并添加您的:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'app_name.view.CustomCsrfMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
希望这会有所帮助。