Python Django restframework,未提供身份验证凭据,knox tokenauthentication

Python Django restframework,未提供身份验证凭据,knox tokenauthentication,python,django,django-rest-framework,django-authentication,django-rest-knox,Python,Django,Django Rest Framework,Django Authentication,Django Rest Knox,我在Traversy Media的youtube上学习了Redox和Django的教程。 我跟着教程走,现在我不知道它被诅咒了 curl http://localhost:8000/api/auth/login/ -d \ '{"username": "Tom", "password": "PassWord@321"}' \ -H "Content-type: application/json" -X POST 通过这样做,我需要得到用户和相应的令牌,但我得到的是 {"detail":"Aut

我在Traversy Media的youtube上学习了Redox和Django的教程。 我跟着教程走,现在我不知道它被诅咒了

curl http://localhost:8000/api/auth/login/ -d \
'{"username": "Tom", "password": "PassWord@321"}' \
-H "Content-type: application/json" -X POST
通过这样做,我需要得到用户和相应的令牌,但我得到的是

{"detail":"Authentication credentials were not provided."}
我所做的一切=>

# settings.py

INSTALLED_APPS = [
    'leads',
    'rest_framework',
    'frontend',
    'accounts',
    'knox',
    'django.contrib.admin', 
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": ("knox.auth.TokenAuthentication", ),
}
我不知道它被压碎了

请添加此代码

class LoginAPI(generics.GenericAPIView):
   serializer_class = LoginSerializer
   permission_classes = () # empty tuple 

   ...........
这里您需要覆盖
LoginAPI
视图的
permission\u类
,因为
permission\u类
负责检查请求是否经过身份验证。因为
LoginAPI
是为视图中没有权限检查的所有用户公开的

# api.py

class LoginAPI(generics.GenericAPIView):
   serializer_class = LoginSerializer

   def post(self, request, *args, **kwargs):
      serializer = self.get_serializer(data = request.data)
      serializer.is_valid(raise_exception = True)
      user = serializer.validated_data
      _, token = AuthToken.objects.create(user)
      return Response({
         "user": UserSerializer(user, context = self.get_serializer_context()).data,
         "token": token
      })

# leadmanager/urls.py

urlpatterns = [
    path("api/auth/", include("accounts.urls")),
]

# accounts/urls.py
urlpatterns = [
   path("login/", LoginAPI.as_view()),
]
class LoginAPI(generics.GenericAPIView):
   serializer_class = LoginSerializer
   permission_classes = () # empty tuple 

   ...........