HttpResponseForbidden 和 handler403
目前我在使用Django,我写了一小段代码,用来给用户显示自定义的错误页面,适用于404、500和403的HTTP响应。
urls.py
from apps.me_report.views import ClientErrorView
from django.views.defaults import page_not_found, server_error, permission_denied
handler404 = ClientErrorView.as_view(default=page_not_found)
handler403 = ClientErrorView.as_view(default=permission_denied)
handler500 = ClientErrorView.as_view(default=server_error)
当有工作人员访问时,默认的方法会被调用,这样可以看到实际的错误信息。但是当我返回这样的内容时:
return http.HttpResponseForbidden('<h1>Forbidden</h1>')
似乎handler403在这种情况下没有起作用。这是为什么呢?我该如何让这个响应像其他403响应一样被处理呢?
1 个回答
4
这些处理程序只在出现异常时被调用,而不是简单地返回一个不同的HTTP状态响应。你需要抛出一个PermissionDenied,而不是返回HttpResponseForbidden:
from django.core import exceptions
raise exceptions.PermissionDenied