繁体   English   中英

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

[英]Apply tokenauthentication Django rest framework on part of the API view based on the type of the request

我是Django休息框架的新手,并且正在努力使用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
            )

我需要在视图的一部分上应用tokenauthentication,而不是在整个视图上。 身份验证应基于请求的类型。 例如,如果type是POST,则不应该有任何身份验证,但对于相同的视图,如果请求以PUT,GET,PATCH等形式进入,则它应该对请求进行身份验证。

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

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

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

并使用类代替IsAuthenticated@permission_classes装饰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM