根据Django文档,我们可以设置这样的默认错误处理程序:
handler403 = 'mysite.views.my_custom_permission_denied_view'
...
我的404和500的处理程序工作正常。但是,如果禁止访问,我无法触发它(当我提出HttpResponseForbidden
时,触发的处理程序是错误500的处理程序)。无论如何,那不是我的问题。我的问题是,当我尝试篡改(用于测试目的)CSRF
令牌时,它会抛出"禁止",但再次,我的处理程序未被禁止使用 - 它调用了403的默认DJANGO模板,禁止使用。当我尝试访问 static
(或 media
)目录的根目录时,调用页面是从服务器默认的obbidder页面(在我的情况下为apache httpd),这很好。
我的问题是:
- 如何为" CSRF验证失败"设置默认处理程序?
- 403处理程序的情况是什么?
- 如何触发403禁止错误?
这是我的设置:
- Python 3.4
- django 1.10(生产,调试= false)
- 服务器:apache httpd通过mod_wsgi
- Windows 7 32bit
您可以做到,在设置中
CSRF_FAILURE_VIEW = 'your_app_name.views.csrf_failure'
在视图中
def csrf_failure(request, reason=""):
ctx = {'message': 'some custom messages'}
return render(request, your_custom_template, ctx)
我认为您应该阅读此内容:
https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-csrf_failure_view
(在您提供的链接中找到它)
看来CSRF在Django中的处理方式几乎没有不同 - 它不是标准的Handler403;