权限类和身份验证类之间的Django REST差异

权限类和身份验证类之间的Django REST差异,django,django-rest-framework,Django,Django Rest Framework,还有最后一件事我有点困惑,那就是权限类和身份验证类之间的差异 这是我的设置。py REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAdminUser', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', 'rest_fram

还有最后一件事我有点困惑,那就是权限类和身份验证类之间的差异

这是我的设置。py

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAdminUser',


),
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
),
'PAGINATE_BY': 10
}

在我看来,我有以下…

class ProfileList(generics.ListCreateAPIView):
    """
    API endpoint that represents a list of users.
    """
    permission_classes = (permissions.IsAdminUser,)
    model = Profile
    serializer_class = ProfileSerializer

    def pre_save(self, obj):
        obj.owner = self.request.user
我假设上面提到的情况是,只有管理员用户可以访问browserable API,而拥有有效令牌的用户仍然可以获得json请求。然而,情况并非如此,只是IsAuthenticated似乎给了他们访问权限,但=这仍然允许我的用户在登录时访问在线版本

我希望所有拥有有效令牌的用户都能访问,但只有管理员用户才有权查看带有会话的在线API版本,这可能吗?

我希望所有拥有有效令牌的用户都能访问,但只有管理员用户才有权查看带有会话的在线API版本,这可能吗

值得注意的第一件事是,可浏览API不会给用户比只呈现JSON时更多的权限。这只是API端点的一个更好的视图。就我个人而言,我通常希望向最终开发人员公开可浏览API,因为它使根据API进行开发变得更容易

如果您真的想对除管理员用户以外的所有人隐藏它,您可以采取以下两种方法:

  • 覆盖视图上的
    get\u renderers()
    方法。(简要记录) 您可以检查self.request.user.is_staff,并且仅当它是管理员用户时才包括可浏览的API呈现程序

  • 子类化可浏览API呈现器,并覆盖
    .render()
    。(例如,请参阅)您可以使用
    renderer\u context['request']
    获取传入请求,如果不是管理员用户,只需将其呈现为标准JSON即可


  • 我认为其工作原理如中所述:

    如果任何权限检查失败,将引发exceptions.PermissionDenied异常,并且视图的主体将不会运行

    如果设置了
    isadmin用户
    ,则该用户必须是管理员。否则,即使提供了
    DEFAULT\u AUTHENTICATION\u类
    中所需的所有内容,他也没有权限