最后一件事我对Django Rest Framework感到困惑,而且在权限类和身份验证类之间存在差异。
这是我的settings.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
我认为上面会发生的是,只有管理员用户才能访问可浏览的API,而具有有效令牌的用户仍然可以获得json请求。但是,情况并非如此,只有IsAuthenticated似乎给他们访问但= =这仍然允许我的用户在登录时访问在线版本。
我希望所有拥有有效令牌的用户都能获得访问权限,但只有管理员用户才有权使用会话查看在线API版本,这可能吗?
答案 0 :(得分:6)
我希望所有拥有有效令牌的用户都能获得访问权限,但只有管理员用户才有权使用会话查看在线API版本,这可能吗?
首先要注意的是,如果您只渲染到JSON,可浏览的API将不会为您的用户提供任何更多的权限。它只是对API端点更好的视图。就个人而言,我通常希望将可浏览的API暴露给最终开发人员,因为它使得针对API的开发变得更容易。
如果您确实想要将其隐藏起来,除了管理员用户之外,您可以采取以下两种方法:
答案 1 :(得分:1)
我认为它的工作原理如the docs:
所述如果任何权限检查失败,则会引发exception.PermissionDenied异常,并且视图的主体将不会运行。
如果您设置IsAdminUser
,则该用户必须是管理员。否则,即使提供了DEFAULT_AUTHENTICATION_CLASSES
中所需的所有内容,他也不会获得许可。