我是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
。