在 Django REST framework 中,默认权限类如何与 per-view(set) 组合?

Kur*_*eek 8 python django django-rest-framework oauth2-toolkit

我正在阅读http://www.django-rest-framework.org/api-guide/permissions/并试图将它与 OAuth2 工具包文档相关联,http://django-oauth-toolkit.readthedocs.io/en /latest/rest-framework/getting_started.html。后者有一个例子,其中在settings.py一个指定

REST_FRAMEWORK = {
    # ...

    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}
Run Code Online (Sandbox Code Playgroud)

此外,IsAuthenticated还指定添加到 a 的permission_classes列表中ModelViewSet

class UserViewSet(viewsets.ModelViewSet):
    permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

我是否从这个例子中正确地推断出DEFAULT_PERMISSION_CLASSES没有前置/后置到 aModelViewSet的权限类,而是被它取代?

wim*_*wim 10

在 Django REST 框架中,默认权限类如何与每个视图(集合)的权限类结合起来?

它们没有合并。

... DEFAULT_PERMISSION_CLASSES 没有前置/后置到 ModelViewSet 的权限类,而是被它替换?

正确的。


duk*_*ody 5

我是否从这个例子中正确地推断出 DEFAULT_PERMISSION_CLASSES没有前置/后置到 a ModelViewSet的权限类,而是被它取代?

DEFAULT_PERMISSION_CLASSES用于其中的观点/ viewsetspermission_classes没有定义。在定义它们的情况下,将使用它们,而不是默认的。


Arn*_*d P 5

如果您确实想扩展默认权限,这似乎可行。

免责声明:我通过查看 DRF 的代码找到了它,不确定它是否已记录。

from rest_framework.settings import api_settings

class UserViewSet(viewsets.ModelViewSet):
    permission_classes = [*api_settings.DEFAULT_PERMISSION_CLASSES, TokenHasReadWriteScope]
Run Code Online (Sandbox Code Playgroud)