仅针对一项操作删除身份验证和权限类别

use*_*656 1 django-rest-framework

我有一个通用视图设置自定义操作,我只想从此操作中删除身份验证和权限类。我尝试了以下方法,但它不起作用。

class ExampleView(GenericViewSet,
    mixins.ListModelMixin,
    mixins.DestroyModelMixin,
    mixins.CreateModelMixin,
):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]

    def custom_action(self, request, format=None):
        self.authentication_classes = []
        self.permission_classes  = []
Run Code Online (Sandbox Code Playgroud)

Ris*_*hiG 7

当您使用操作装饰器标记用于路由的自定义操作时,您应该能够指定权限类和身份验证类。

例如:

class ExampleView(GenericViewSet,
    mixins.ListModelMixin,
    mixins.DestroyModelMixin,
    mixins.CreateModelMixin,
):
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated]

    @action(detail=False, permission_classes=[AllowAny], authentication_classes=[])
    def custom_action(self, request, format=None):
        ...
Run Code Online (Sandbox Code Playgroud)