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.
...
try:
import coreapi
except ImportError:
coreapi = None
...
Попробуйте импортировать модуль coreapi из модуля compat, как показано выше. Однако если модуль coreapi не установлен, то через оператор except ему будет присвоен None, и ObtainAuthToken будет использовать этот None. Поэтому и возникает ошибка. Не установлен ли пакет coreapi? (В вашем файле requirements.txt отсутствует coreapi)
pip install coreapi
Вы можете обратиться к этой статье. --> drf схемы документов