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

时间:2014-05-09 06:08:40

标签: django django-views

我在视图的dispatch()中编写这样的代码来约束对特定用户的访问:

if user.name != 'admin':
    raise PermissionDenied("you don't have access")

如果引发异常,它只会显示在重定向的页面上:

  

403 Forbidden

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

403 Forbidden
you don't have access

2 个答案:

答案 0 :(得分:0)

您可以使用django中间件并使用HttpResponseForbidden

来实现此目的

像这样编写django中间件,

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

注意:上述中间件适用于所有视图。

如果您想限制特定视图,可以使用它,

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

答案 1 :(得分:-1)

使用自定义403错误视图。你会在互联网上找到很多例子。