因此,我一直在使用 William Vincent 的《REST API 与 Django》一书将 REST API 组合在一起。 我已经按照书本准备好了一切,但我有点菜鸟,所以我需要专业人士的一些澄清。
如何限制具有令牌的用户查看 API 中的某些信息?
我将
authentication_classes = [TokenAuthentication]
添加到 class UserList
中,认为如果用户使用令牌登录,则登录用户将能够访问我的 api 的信息,但我得到以下信息:
当我删除
authentication_classes = [TokenAuthentication]
时,我得到以下内容。
所有用户都可以看到我的 API,但我不希望这样,我只希望拥有 Token 的用户可以查看我的 api。
非常感谢任何帮助!
谢谢! 代码如下
# api/views.py
from django.contrib.auth import get_user_model
from rest_framework import generics, permissions
from rest_framework.authentication import TokenAuthentication
from .serializers import UserSerializer
# Display List View - User
class UserList(generics.ListAPIView):
queryset = get_user_model().objects.all()
serializer_class = UserSerializer
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = [TokenAuthentication]
# api/serializers.py
from django.contrib.auth import get_user_model
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields =('id', 'username', 'email',)
#api/urls.py
from django.urls import path
from .views import (UserList)
urlpatterns = [
path('users/', UserList.as_view()),
]
#master_application/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('users.urls')),
path('api/', include('api.urls')),
path('api-auth/', include('rest_framework.urls')),
path('api/rest-auth/', include('rest_auth.urls')),
path('api/rest-auth/registration/', include('rest_auth.registration.urls')),
path('', include('django.contrib.auth.urls')),
path('users/', include('users.urls')),
path('users/', include('django.contrib.auth.urls')),
]
设置.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}
将删除
authentication_classes = [TokenAuthentication]
。谢谢大家。