问题
我正在使用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
.