class {model_name}View(APIView):

    permission_classes = (IsAuthenticatedOrReadOnly,)

    def post(self, request):
        serializer = {serializer_name}(data=request.POST)
        if not serializer.is_valid():
            return Response(data={{
                **serializer.errors,
                'success': False
            }}, status=HTTPStatus.BAD_REQUEST)
        serializer.save()
        return Response(data={{
            'message': 'Record Created.',
            'success': True
        }}, status=HTTPStatus.OK)

    def get(self, request, pk=None):
        if not pk:
            return Response({{
                'data': [{serializer_name}(instance=obj).data for obj in {model_name}.objects.all()],
                'success': True
            }}, status=HTTPStatus.OK)
        try:
            obj = get_object_or_404({model_name}, pk=pk)
        except Http404:
            return Response(data={{
                'message': 'object with given id not found.',
                'success': False
            }}, status=HTTPStatus.NOT_FOUND)
        return Response({{
            'data': {serializer_name}(instance=obj).data,
            'success': True
        }}, status=HTTPStatus.OK)

    def put(self, request, pk):
        try:
            obj = get_object_or_404({model_name}, pk=pk)
        except Http404:
            return Response(data={{
                'message': 'object with given id not found.',
                'success': False
            }}, status=HTTPStatus.NOT_FOUND)
        serializer = {serializer_name}(instance=obj, data=request.POST, partial=True)
        if not serializer.is_valid():
            return Response(data={{
                **serializer.errors,
                'success': False
            }}, status=HTTPStatus.BAD_REQUEST)
        serializer.save()
        return Response(data={{
            'message': 'Record Updated.',
            'success': True
        }}, status=HTTPStatus.OK)

    def delete(self, request, pk):
        try:
            obj = get_object_or_404({model_name}, pk=pk)
        except Http404:
            return Response(data={{
                'message': 'object with given id not found.',
                'success': False
            }}, status=HTTPStatus.NOT_FOUND)
        obj.delete()
        return Response(data={{
            'message': 'Record Deleted.',
            'success': True
        }}, status=HTTPStatus.OK)
