【问题标题】:How to set a default handler for "CSRF verification failed" in django?如何在 django 中为“CSRF 验证失败”设置默认处理程序?
【发布时间】:2016-11-23 07:47:01
【问题描述】:

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

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

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

我的问题是:

  • 如何设置“CSRF 验证失败”的默认处理程序?
  • 403处理程序被调用的情况有哪些?
  • 如何触发 403 禁止错误?

这是我的设置:

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

【问题讨论】:

    标签: python django apache mod-wsgi http-status-code-403


    【解决方案1】:

    你可以在设置中做

    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)
    

    【讨论】:

    • 效果很好。谢谢。
    【解决方案2】:

    我认为您应该阅读以下内容:

    https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-CSRF_FAILURE_VIEW

    (在您提供的链接中找到)

    看起来 CSRF 在 django 中的处理方式几乎没有什么不同——而且它不是标准的 handler403;

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 2012-09-08
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多