ViewSet 仅在一个 REST 操作(Django Rest)中使用令牌身份验证



问题

我正在使用Django Rest Framework。在这种情况下,ViewSet.仅在一个 REST 操作上,我想使用Token Authentication.DRF 是否提供类似的东西?

感谢您的帮助。

class UserProfileViewSet(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer
#Here the Token Authentication should be
def destroy(self, request, pk=None, **kwargs):
try:
user = User.objects.get(pk=pk)
user.delete()
except User.DoesNotExist:
return Response(status=status.HTTP_400_BAD_REQUEST)
return Response(status=status.HTTP_204_NO_CONTENT)

重写get_authenticators()方法,如下所示。get_authenticators()方法实例化并返回此视图可以使用的身份验证器列表。在您的情况下,如果操作被销毁,该方法将返回/验证TokenAuthentication,(HTTP DELETE(

from rest_framework.authentication import TokenAuthentication

class UserProfileViewSet(viewsets.ModelViewSet):
# your code
authentication_classes = (TokenAuthentication,)
def get_authenticators(self):
if self.action == 'destroy':
return super().get_authenticators()
return []
def destroy(self, request, pk=None, **kwargs):
# your code

一种方法可以定义一个自定义权限类,如下所示:

class AuthenticatedDelete(BasePermission):
def has_permission(self, request, view):
if request.method == 'DELETE':
if not request.user.is_authenticated():
return False
return True

然后将其添加到您的permission_classes.

最新更新