Как добавить определенный c уровень доступа к настраиваемому действию в наборе видов в Django Rest Framework? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть ModelViewSet в Django Rest Framework со всеми функциями crud и я установил разрешения на IsAuthenticated, но я сделал настраиваемое действие и хочу, чтобы оно было publi c, но я понятия не имею, как это сделать поскольку в документации показано только, как это сделать с помощью @api_view (), вот мой ModelViewSet

class UserViewSet(viewsets.ModelViewSet):
    """User viewset"""

    queryset = User.objects.all()
    serializer_class = UserModelSerializer
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]

    @action(detail=False, methods=['post'])
    def signup(self, request):
        """Sign Up users without profile. """
        serializer = UserSignUpSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):
            user = serializer.save()
            data = {
                'user' : user,
            }
            return Response(data, status=status.HTTP_201_CREATED)

    @action(detail=False, methods=['post'])     
    def login(self, request, *args, **kwargs):
        """ Handle logins request. """
        serializer = UserLoginSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user, token = serializer.save()
        data= {
            'user': user,
            'access_token' : token
        }
        return Response(data, status=status.HTTP_201_CREATED)

Я хочу сделать логин @action publi c, надеюсь, вы, ребята, можете мне помочь

1 Ответ

1 голос
/ 16 июня 2020

Вы можете добавить параметр в деактор действия для изменения класса разрешений.

    @action(detail=False, methods=['post'], permission_classes=[AllowAny])     
    def login(self, request, *args, **kwargs):
        """ Handle logins request. """
        serializer = UserLoginSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user, token = serializer.save()
        data= {
            'user': user,
            'access_token' : token
        }
        return Response(data, status=status.HTTP_201_CREATED)

Подробности в документе

...