根据请求的类型在 API 视图的一部分上应用 tokenauthentication Django rest 框架



我是Django rest框架的新手,正在努力进行api视图令牌身份验证。以下是我的代码

@api_view(['POST'])
@authentication_classes((TokenAuthentication,))
@permission_classes((IsAuthenticated,))
    def create_user(request):
        """
        API to add user
        """
        if request.method == 'POST':
            request_body = request.data['users']
            created_user_ids = []
            # Data must be provided and validated
            validation = UserSerializer(data=request_body, many=True)
            validation.is_valid(raise_exception=True)
            created_user_ids.append(validation.save())
            return Response(
                data={'users': [{'id': user_id} for user_id in created_user_ids]},
                content_type='json',
                status=status.HTTP_201_CREATED
            )

我需要在视图的一部分而不是整个视图上应用令牌身份验证。身份验证应基于请求的类型。例如如果类型为 POST,则不应有任何身份验证,但对于同一视图,如果请求以 PUT、GET、补丁等形式出现,它应该对请求进行身份验证。

如果我理解得很好,您希望将IsAuthenticated权限应用于您的视图,除非该方法是POST

我建议创建一个自定义权限:

class IsAuthenticatedOrPost(IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return True
        return super().has_permission(request, view)

并在@permission_classes装饰器中使用该类而不是IsAuthenticated

最新更新