在Django REST框架中的ModelViewSet中对不同的操作使用不同的身份验证

dad*_*yad 4 django django-rest-framework

我有以下ModelViewSet

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
    authentication_classes = (TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated, MyUserPermissions)
Run Code Online (Sandbox Code Playgroud)

我希望create method (POST on /users/)不要求任何身份验证.在这种情况下,如何覆盖authentication_classes?我说的ModelViewSet不是通用的API视图.

Tom*_*tie 7

我希望create方法(POST/users /上的POST)不要求任何身份验证.

实际上那不是你想要的.您希望POST用户不需要任何权限,这将导致经过身份验证或未经身份验证的请求成功.

我建议覆盖你的权限类,以便他们总是允许POST请求.有关详细信息,请按照自定义权限文档进行操作.

基本上你会有类似的东西:

class IsAuthenticatedOrCreate(permissions.IsAuthenticated):
    def has_permission(self, request, view):
        if request.method == 'POST':
            return True
        return super(IsAuthenticatedOrCreate, self).has_permission(request, view)
Run Code Online (Sandbox Code Playgroud)

也许类似于你的其他权限类别.