社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

使用 Python 5 分钟绘制漂亮的系统架构图

AirPython • 2 年前 • 377 次点击  

 

大家好,我是安果!


Diagrams  是一个基于 Python 绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构


并支持以下 6 个云产品的图标,分别是:AWS、Azure、GCP、K8s、阿里云、Oracle 云


基于 Diagrams 提供的节点,你只需要指定一个云产品(实际上选哪个都一样,我们只需要那个产品相应的图标,你可以选一个自己觉得好看的产品),使用其内部自带的云产品的图标,就能简单绘制基于某云产品图标的架构图


比如下面的代码,绘制了一个简单的基于数据库集群的网络服务架构:


非常非常适合用来做毕业论文的架构图绘制,强烈推荐

1.准备


首先,安装依赖包




    
pip install diagrams

看到 Successfully installed xxx 则说明安装成功

由于 Diagrams 使用了 graphviz 作为渲染工具,因此为了顺利使用 Diagrams ,还需要下载 graphviz

下载地址:

https://www.graphviz.org/download/

MacOS 用户可以直接 brew 命令进行安装:

brew install graphviz

2.基本使用与例子


2.1 初始化与导出

使用 Diagram 类初始化一个绘图上下文,这个类接收到的第一个参数将会成为架构图的文件名,而一当代码运行完毕,它将会以该文件名保存(空格会被下划线所替代):



此外,它还可以选择导出的文件格式,在 Diagram 类里增加 outformat 参数,也可以不以第一个参数为文件保存名称,增加 filename 参数指定名称即可:


with Diagram("Simple Diagram", outformat="jpg", filename="my_diagram")

2.2 节点类型

由于节点类型比较多,我们无法一一展示出来,所有类型的节点里都可以在官方文档里找到


比如:

阿里云:https://diagrams.mingrammer.com/docs/nodes/alibabacloud
K8S:https://diagrams.mingrammer.com/docs/nodes/k8s
AWS:https://diagrams.mingrammer.com/docs/nodes/aws

接下来以 AWS 为例子,讲解几个基本的数据流例子:




几个操作符:

 >> 表示从左到右的数据流
 << 表示从右到左的数据流
 -  表示没有箭头的数据流


还可以用变量赋值的形式简化代码:




可以看到这里箭头的方向变了,这是因为Diagram加了 direction 参数,TB 表示数据流向 top to bottm, 即从上到下,可选的其他参数还有:LR(左至右)、BT(底至上)、RL(右至左)。


上面的代码还可以用数组的形式进一步简化:


2.3 集群块

使用 Cluster 类,你可以非常方便地生成一个集群块:




而且还可以做得相当复杂:


这里代码很简单,但是比较长,后续还有一个比较重要的例子,这里就不展示了,有兴趣的话可以点击最下方阅读原文进行查看。

2.4 自定义线的颜色与属性

使用 Edge 函数,你可以自定义线的颜色与属性以及备注,比如:

Edge(color="firebrick", style="dashed", label="test")# 使用火砖色,线的类型为虚线,备注为test

下面是一个比较复杂的例子,但是你如果认真阅读了,会发现它其实很简单:




如果对你有帮助,麻烦在下面点一个赞/在看,有任何问题都可以在下方留言,我会耐心解答的!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/151361
 
377 次点击