django:如何让PermissionDenied异常显示原因?

django:如何让PermissionDenied异常显示原因?,django,django-views,Django,Django Views,我在视图的dispatch()中编写了如下代码,以限制对特定用户的访问: if user.name != 'admin': raise PermissionDenied("you don't have access") 如果引发了异常,它只会显示在以下的重定向页面上: 403禁止 是否可以让django显示错误页面,原因如下: 403 Forbidden you don't have access 使用自定义403错误视图。您可以在internet上找到大量示例。您可以使用Djang

我在视图的dispatch()中编写了如下代码,以限制对特定用户的访问:

if user.name != 'admin':
    raise PermissionDenied("you don't have access")
如果引发了异常,它只会显示在以下的重定向页面上:

403禁止

是否可以让django显示错误页面,原因如下:

403 Forbidden
you don't have access

使用自定义403错误视图。您可以在internet上找到大量示例。

您可以使用Django中间件和
HttpResponseForbidden
实现这一点。它看起来像这样:

from django.shortcuts import HttpResponseForbidden

class ForbiddenMiddleware(object):
    """
        Don't give permissions for particular without admin
    """
    def process_request(self, request):
        if not request.user.is_superuser:
           return HttpResponseForbidden("403 Forbidden , you don't have access")
        return None
from django.http import HttpResponseForbidden
注意:上述中间件适用于所有视图

如果要将检查限制为特定视图,请执行以下操作:

def my_view(request, ):
    if not request.user.is_superuser:
      return HttpResponseForbidden("403 Forbidden , you don't have access")
    else:
        # your render
更新2020

在Django 3.0中,您必须从
http
导入
httpreponseforbidded
类,如下所示:

from django.shortcuts import HttpResponseForbidden

class ForbiddenMiddleware(object):
    """
        Don't give permissions for particular without admin
    """
    def process_request(self, request):
        if not request.user.is_superuser:
           return HttpResponseForbidden("403 Forbidden , you don't have access")
        return None
from django.http import HttpResponseForbidden

你能发布完整的错误日志吗?@dhana抱歉,问题不清楚,没有问题,我只是想问一下我是否能在异常页面上显示异常描述