Django 在基于类的视图中正确实现UserPasseStMixin或AccessMixin

Django 在基于类的视图中正确实现UserPasseStMixin或AccessMixin,django,django-views,Django,Django Views,使用基于类的视图时,可以以下列方式()使用userpassestimixin: 文件还规定: 此外,您可以设置AccessMixin的任何参数来定制对未授权用户的处理 但是,没有提供关于如何执行此操作的语法示例。例如,我如何设置raise\u exception和permission\u denied\u message以使经过身份验证的用户获得异常错误而不是403 这不起作用,因为用户仍然返回403错误: class MyView(UserPassesTestMixin, View):

使用基于类的视图时,可以以下列方式()使用
userpassestimixin

文件还规定:

此外,您可以设置AccessMixin的任何参数来定制对未授权用户的处理

但是,没有提供关于如何执行此操作的语法示例。例如,我如何设置
raise\u exception
permission\u denied\u message
以使经过身份验证的用户获得异常错误而不是403

这不起作用,因为用户仍然返回403错误:

class MyView(UserPassesTestMixin, View):
    raise_exception = True
    permission_denied_message = 'You have been denied'


    def test_func(self):
        return self.request.user.email.endswith('@example.com')

您应该重写
handle\u no\u permission
方法来处理用户在未通过测试时看到的内容:

class MyView(UserPassesTestMixin, View):
    def test_func(self):
        return self.request.user.email.endswith('@example.com')

    def handle_no_permission(self):
        """ Do whatever you want here if the user doesn't pass the test """
        return HttpResponse('You have been denied')

您应该重写
handle\u no\u permission
方法来处理用户在未通过测试时看到的内容:

class MyView(UserPassesTestMixin, View):
    def test_func(self):
        return self.request.user.email.endswith('@example.com')

    def handle_no_permission(self):
        """ Do whatever you want here if the user doesn't pass the test """
        return HttpResponse('You have been denied')

基于类的视图
userpassestimixin
继承自
AccessMixin
mixin,其中表示选项。从的文档中

如果此属性设置为
True
,则会出现PermissionDenied异常 当条件不满足时提出。如果为False(默认值), 匿名用户被重定向到登录页面

当您将其设置为True且用户未通过身份验证时,服务器将返回403状态。选项
permission\u denied\u message
仅控制将传递给PermissionDenied异常的消息。它不会向用户返回任何消息(当然,您可以覆盖它)。一个稍微简化的版本来自:

其中
PermissionDenied
类就这么简单:

class PermissionDenied(Exception):
    """The user did not have permission to do that"""
    pass

基于类的视图
userpassestimixin
继承自
AccessMixin
mixin,其中表示选项。从的文档中

如果此属性设置为
True
,则会出现PermissionDenied异常 当条件不满足时提出。如果为False(默认值), 匿名用户被重定向到登录页面

当您将其设置为True且用户未通过身份验证时,服务器将返回403状态。选项
permission\u denied\u message
仅控制将传递给PermissionDenied异常的消息。它不会向用户返回任何消息(当然,您可以覆盖它)。一个稍微简化的版本来自:

其中
PermissionDenied
类就这么简单:

class PermissionDenied(Exception):
    """The user did not have permission to do that"""
    pass