Drf и simplejwt ошибка в coreapi : None type object has no attribute 'Field'

У меня есть проект DRF, документированный с помощью drf_yasg и валидатора rest framework simple jwt. Это мой файл requirements.txt.

File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\core\accounts\api\v1\urls\accounts.py", line 5, in <module>
    from .. import views
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\core\accounts\api\v1\views.py", line 4, in <module>
    from rest_framework.authtoken.views import ObtainAuthToken
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_framework\authtoken\views.py", line 11, in <module>
    class ObtainAuthToken(APIView):
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_fra  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\core\accounts\api\v1\views.py", line 4, in <module>
    from rest_framework.authtoken.views import ObtainAuthToken
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_framework\authtoken\views.py", line 11, in <module>
    class ObtainAuthToken(APIView):
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_fra    from rest_framework.authtoken.views import ObtainAuthToken
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_framework\authtoken\views.py", line 11, in <module>
    class ObtainAuthToken(APIView):
  File "C:\Users\ASUS\OneDrive\Desktop\django\Django-Advance\venv\Lib\site-packages\rest_framework\authtoken\views.py", line 21, in ObtainAuthToken
    coreapi.Field(
    ^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'Field'

Вот мой файл requirements.txt:

# general modules
django<4.3,>4.2
python-decouple
Pillow

# third party modules
djangorestframework
markdown
django-filter
drf-yasg[validation]

djangorestframework-simplejwt[crypto]
# deployment modules

вот созданный мною класс CustomObtainAuthToke:

class CustomObtainAuthToken(ObtainAuthToken):
    serializer_class = CustomAuthTokenSerializer

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(
            data=request.data, context={"request": request}
        )
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data["user"]
        token, created = Token.objects.get_or_create(user=user)
        return Response(
            {
                "user_id": user.pk,
                "email": user.email,
                "token": token.key,
            }
        )

и вот как я импортирую это в строке 4 from rest_framework.authtoken.views import ObtainAuthToken

Я попытался вернуть модули requirements.txt. Я изменил DRF на другую версию для тестирования 3.12, 3.13, 3.14, 3.15. и установлена последняя версия Django Rest Framework

rest_framework/authtoken/views/ObtainAuthToken

class ObtainAuthToken(APIView):
throttle_classes = ()
permission_classes = ()
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)
serializer_class = AuthTokenSerializer

if coreapi_schema.is_enabled():
    schema = ManualSchema(
        fields=[
            coreapi.Field(
                name="username",
                required=True,
                location='form',
                schema=coreschema.String(
                    title="Username",
                    description="Valid username for authentication",
                ),
            ),

AttributeError: у объекта 'NoneType' нет атрибута 'Field' Именно здесь возникает ошибка.

В классе ObtainAuthToken попробуйте выполнить действие coreapi.Field, связанное со схемой. Однако возникает ошибка, поскольку coreapi - None. Для справки, coreapi импортируется из модуля rest_framework compat.

rest_framework/compat/

...
try:
    import coreapi
except ImportError:
    coreapi = None
...

Попробуйте импортировать модуль coreapi из модуля compat, как показано выше. Однако если модуль coreapi не установлен, то через оператор except ему будет присвоен None, и ObtainAuthToken будет использовать этот None. Поэтому и возникает ошибка. Не установлен ли пакет coreapi? (В вашем файле requirements.txt отсутствует coreapi)

pip install coreapi

Вы можете обратиться к этой статье. --> drf схемы документов

Вернуться на верх