当我尝试访问api时出现此错误:
"detail": "Authentication credentials were not provided."
我已将其包含在settings.py中:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
)
}
我的应用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
我的views.py:
class UserViewSet(viewsets.ModelViewSet):
queryset = User.object.all()
serializer_class = serializers.UserSerializers
serializers.py:
from rest_framework import serializers
from users.models import User
class UserSerializers(serializers.ModelSerializer):
class Meta:
model = User
fields = ('email','password')
我的主要urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('',include(urls)),
path ('', include(user_urls)),
path('api/',include(api_urls)),
当我运行localhost:8000 / api时出现错误
答案 0 :(得分:2)
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES':(
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES':(
'rest_framework.permissions.IsAuthenticated',
)
}
在您的settings.py
文件中使用它,发生的情况是rest_framework.authentication.TokenAuthentication
期望带有令牌的授权标头作为其值,但是您无法通过浏览器发送该标头,以从浏览器浏览API您必须启用SessionAuthentication
。
答案 1 :(得分:1)
如果您使用的是 TokenAuthentication ,则无法从浏览器网址访问api。 正如 @DarkOrb 所说,TokenAuthentication期望使用令牌作为其值的授权 header 。 因此,每当调用 api 时,您都必须传递令牌。 您可以使用postman测试api。
在上图中,我已在邮递员的标头中传递令牌以访问我的api。 当您从前端调用api时,将令牌与请求一起传递。 如果只想在桌面浏览器中使用api,则只能使用 SessionAuthentication 。对于移动设备,必须完成 Tokenauthentication 。