# `drf-yasg` Integration

drf-yasg is a library that automatically generates an OpenAPI schema by inspecting DRF `Serializer` definitions. Because `django-rest-framework-simplejwt` serializers are not symmetric, if you want to generate correct OpenAPI schemas for your JWT token endpoints, use the following code to decorate your JWT `View` definitions.

    from drf_yasg.utils import swagger_auto_schema
    from rest_framework import serializers, status
    from rest_framework_simplejwt.views import (
        TokenBlacklistView,
        TokenObtainPairView,
        TokenRefreshView,
        TokenVerifyView,
    )

    class TokenObtainPairResponseSerializer(serializers.Serializer):
        access = serializers.CharField()
        refresh = serializers.CharField()

        def create(self, validated_data):
            raise NotImplementedError()

        def update(self, instance, validated_data):
            raise NotImplementedError()

    class DecoratedTokenObtainPairView(TokenObtainPairView):
        @swagger_auto_schema(
            responses={
                status.HTTP_200_OK: TokenObtainPairResponseSerializer,
            }
        )
        def post(self, request, *args, **kwargs):
            return super().post(request, *args, **kwargs)

    class TokenRefreshResponseSerializer(serializers.Serializer):
        access = serializers.CharField()

        def create(self, validated_data):
            raise NotImplementedError()

        def update(self, instance, validated_data):
            raise NotImplementedError()

    class DecoratedTokenRefreshView(TokenRefreshView):
        @swagger_auto_schema(
            responses={
                status.HTTP_200_OK: TokenRefreshResponseSerializer,
            }
        )
        def post(self, request, *args, **kwargs):
            return super().post(request, *args, **kwargs)

    class TokenVerifyResponseSerializer(serializers.Serializer):
        def create(self, validated_data):
            raise NotImplementedError()

        def update(self, instance, validated_data):
            raise NotImplementedError()

    class DecoratedTokenVerifyView(TokenVerifyView):
        @swagger_auto_schema(
            responses={
                status.HTTP_200_OK: TokenVerifyResponseSerializer,
            }
        )
        def post(self, request, *args, **kwargs):
            return super().post(request, *args, **kwargs)

    class TokenBlacklistResponseSerializer(serializers.Serializer):
        def create(self, validated_data):
            raise NotImplementedError()

        def update(self, instance, validated_data):
            raise NotImplementedError()

    class DecoratedTokenBlacklistView(TokenBlacklistView):
        @swagger_auto_schema(
            responses={
                status.HTTP_200_OK: TokenBlacklistResponseSerializer,
            }
        )
        def post(self, request, *args, **kwargs):
            return super().post(request, *args, **kwargs)