未提供身份验证凭据 drf

afk*_*afk 3 django python-3.x django-rest-framework

当我尝试访问 api 时,出现此错误:

 "detail": "Authentication credentials were not provided."
Run Code Online (Sandbox Code Playgroud)

我已将其包含在 settings.py 中:

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',


),
'DEFAULT_PERMISSION_CLASSES':(
    'rest_framework.permissions.IsAuthenticated',
)

}
Run Code Online (Sandbox Code Playgroud)

我的应用程序 api urls.py:

from django.urls import path,include
from . import views
from rest_framework import routers

router = routers.SimpleRouter()
router.register(r'',views.UserViewSet, 'user_list')
urlpatterns = router.urls
Run Code Online (Sandbox Code Playgroud)

我的观点.py:

class UserViewSet(viewsets.ModelViewSet):
       queryset = User.object.all()
       serializer_class = serializers.UserSerializers
Run Code Online (Sandbox Code Playgroud)

序列化器.py:

from rest_framework import serializers
from users.models import User


class UserSerializers(serializers.ModelSerializer):
  class Meta:
    model = User
    fields = ('email','password')
Run Code Online (Sandbox Code Playgroud)

我的主要 urls.py:

urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls)),
path ('', include(user_urls)),
path('api/',include(api_urls)),
Run Code Online (Sandbox Code Playgroud)

当我运行 localhost:8000/api 时出现错误

Gil*_*sma 5

如果您使用TokenAuthentication,则无法从浏览器 url 访问 api 。正如@DarkOrb TokenAuthentication所说,它需要一个带有token值的授权标头。所以每次调用api时都必须传递token。您可以使用postman测试您的 api 。

在此输入图像描述

在上图中,我已经在邮递员的标头中传递了令牌来访问我的 api。当您从前端调用 api 时,请将您的令牌与请求一起传递。如果您只想在桌面浏览器中使用您的API,那么您只能使用SessionAuthentication。对于移动设备,必须完成Token身份验证。