Оператор возврата ответа не возвращает никакого ответа

Я создаю представление logout для выхода из моего django restframework с помощью simplejwt. Прямого способа выйти из системы нет, так что только внесение токена refresh в черный список является обходным путем. Вот мой код

class LogoutSerializer(serializers.Serializer):
    refresh = serializers.CharField()

    def validate(self, attrs):
        self.token = attrs['refresh']
        return attrs

    def save(self, **kwargs):
        try:
            RefreshToken(self.token).blacklist()
            print('done')
            return Response({'msg':'token has been blacklisted'})
       

        except TokenError:
            print('not done')
            return Response({'msg':'token is expired or blacklisted'})

views.py

class LogoutAPIView(APIView):
    serializer_class = LogoutSerializer
    permission_classes = [IsAuthenticated]

    def post(self, request):
        serializer = self.serializer_class(data = request.data)
        serializer.is_valid(raise_exception = True)
        serializer.save()

        return Response(status = status.HTTP_204_NO_CONTENT)

Эти операторы print печатаются, так что он заносит токены в черный список, но оператор return ничего не возвращает, почему так происходит и как я могу вернуть Response?

def post(self, request):
    serializer = self.serializer_class(data = request.data)
    serializer.is_valid(raise_exception = True)
    serializer.save()

    return Response(status = status.HTTP_204_NO_CONTENT) # this is the response that you're actually returning to the client.

Если вы хотите вернуть ответы в сериализаторе, вы можете сделать:

class LogoutSerializer(serializers.Serializer):
    refresh = serializers.CharField()

    def validate(self, attrs):
        self.token = attrs['refresh']
        return attrs

    def save(self, **kwargs):
        RefreshToken(self.token).blacklist()

then:

def post(self, request):
    serializer = self.serializer_class(data = request.data)
    serializer.is_valid(raise_exception = True)
    try:
        serializer.save()
        return Response({'msg':'token has been blacklisted'})
    except TokenError:
        return Response({'msg':'token is expired or blacklisted'})
Вернуться на верх