如何在 django 中为 "CSRF verification failed" 设置默认处理程序?



根据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;

最新更新