2016-11-23 69 views
2

按照Django documentation,我们可以设置一个默认的错误处理程序是这样的:如何在django中设置“CSRF验证失败”的默认处理程序?

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

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

我的问题是:

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

这里是我的设置:

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

回答

2

你可以做,在设置

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) 
+0

的伟大工程。谢谢。 – someone