ViewSet использует Token Authentication только для одной операции REST (Django Rest) - PullRequest
0 голосов
/ 16 сентября 2018

Задача

Я использую Django Rest Framework. В этом случае ViewSet. Только для одной операции REST я хочу использовать Token Authentication. Обеспечивает ли DRF что-нибудь подобное?

Спасибо за помощь.

 class UserProfileViewSet(viewsets.ModelViewSet):
      queryset = UserProfile.objects.all()
      serializer_class = UserProfileSerializer

      #Here the Token Authentication should be
      def destroy(self, request, pk=None, **kwargs):
          try:
              user = User.objects.get(pk=pk)
              user.delete()
          except User.DoesNotExist:
              return Response(status=status.HTTP_400_BAD_REQUEST)
          return Response(status=status.HTTP_204_NO_CONTENT)

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Переопределите метод get_authenticators(), как показано ниже. Метод get_authenticators() создает и возвращает список средств проверки подлинности, которые может использовать это представление. В вашем случае метод возвратит / подтвердит TokenAuthentication если действие уничтожить , (HTTP DELETE)

from rest_framework.authentication import TokenAuthentication


class UserProfileViewSet(viewsets.ModelViewSet):
    # your code
    <b>authentication_classes = (TokenAuthentication,)

    def get_authenticators(self):
        if self.action == 'destroy':
            return super().get_authenticators()
        return []</b>

    def destroy(self, request, pk=None, **kwargs):
        # your code
0 голосов
/ 16 сентября 2018

Можно определить собственный класс разрешений для чего-то вроде этого:

class AuthenticatedDelete(BasePermission):
    def has_permission(self, request, view):
        if request.method == 'DELETE':
            if not request.user.is_authenticated():
                return False
        return True

И затем добавить его в свой permission_classes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...