Skip to main content
 首页 » 编程设计

python之如何在 Django 中为 "CSRF verification failed"设置默认处理程序

2024年10月17日29虾米姐

根据Django documentation ,我们可以像这样设置默认错误处理程序:

handler403 = 'mysite.views.my_custom_permission_denied_view' 
... 

我的 404 和 500 处理程序工作正常。但是在禁止访问的情况下,我无法触发它(当我引发 HttpResponseForbidden 时,触发的处理程序是错误 500 的处理程序)。无论如何,那不是我的问题。我的问题是当我试图篡改(出于测试目的)CSRF token 时,它会抛出“Forbidden”但同样,我的禁止访问处理程序未被调用 - 它调用 403 forbidden 的默认 django 模板.当我尝试访问 static(或 media)目录的根目录时,调用的页面来自服务器默认的禁止页面(在我的例子中是 apache httpd),它是很好。

我的问题是:

  • 如何为“CSRF 验证失败”设置默认处理程序?
  • 调用 403 处理程序的情况是什么?
  • 如何触发 403 禁止错误?

这是我的设置:

  • python 3.4
  • Django 1.10(生产、调试 = False)
  • 服务器:Apache httpd 通过 mod_wsgi
  • Windows 7 32 位

请您参考如下方法:

你可以在设置里做

CSRF_FAILURE_VIEW = 'your_app_name.views.csrf_failure' 

在 View 中

def csrf_failure(request, reason=""): 
    ctx = {'message': 'some custom messages'} 
    return render(request, your_custom_template, ctx)