window系统下为django自动绘制模型类关系图
Django 提供第三方包 django-extensions,可以用来将 Django 中的 Models 生成 E-R 图。
1 安装包
pip install django-extensions
2 配置
在 Django settings.py 文件, INSTALLED_APPS 中添加 django_extensions
INSTALLED_APPS = ('django_extensions',
)
3 生成 dot 文件和 png 图片
- 生成全部 model 的 E-R 图
python manage.py graph_models -a > all.dot
- 单独某个 Django App (以
django_view_permission为例) 生成 dot 文件
python manage.py graph_models django_view_permission > django_view_permission.dot
导出的 dot 内容如下:django_view_permission.dot
digraph model_graph {// Dotfile by Django-Extensions graph_models// Created: 2018-03-03 14:55// Cli Options: django_view_permissionfontname = "Helvetica"fontsize = 8splines = truenode [fontname = "Helvetica"fontsize = 8shape = "plaintext"]edge [fontname = "Helvetica"fontsize = 8]// Labelsdjango_view_permission_models_CommonElement [label=<<TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"><FONT FACE="Helvetica Bold" COLOR="white">CommonElement</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">create_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">DateTimeField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">doc</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">TextField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">update_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">DateTimeField</FONT></TD></TR></TABLE>>]django_view_permission_models_View [label=<<TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"><FONT FACE="Helvetica Bold" COLOR="white">View<BR/><<FONT FACE="Helvetica Italic">CommonElement</FONT>></FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT FACE="Helvetica Bold">id</FONT></TD><TD ALIGN="LEFT"><FONT FACE="Helvetica Bold">AutoField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">create_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">doc</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">TextField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">func</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">CharField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">module</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">CharField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica ">name</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica ">CharField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">update_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR></TABLE>>]django_view_permission_models_ViewSet [label=<<TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"><FONT FACE="Helvetica Bold" COLOR="white">ViewSet<BR/><<FONT FACE="Helvetica Italic">CommonElement</FONT>></FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT FACE="Helvetica Bold">id</FONT></TD><TD ALIGN="LEFT"><FONT FACE="Helvetica Bold">AutoField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">create_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">doc</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">TextField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT FACE="Helvetica ">name</FONT></TD><TD ALIGN="LEFT"><FONT FACE="Helvetica ">CharField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">update_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR></TABLE>>]django_view_permission_models_ViewPermission [label=<<TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"><FONT FACE="Helvetica Bold" COLOR="white">ViewPermission<BR/><<FONT FACE="Helvetica Italic">CommonElement</FONT>></FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT FACE="Helvetica Bold">id</FONT></TD><TD ALIGN="LEFT"><FONT FACE="Helvetica Bold">AutoField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">create_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">doc</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">TextField</FONT></TD></TR><TR><TD ALIGN="LEFT" BORDER="0"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">update_time</FONT></TD><TD ALIGN="LEFT"><FONT COLOR="#7B7B7B" FACE="Helvetica Italic">DateTimeField</FONT></TD></TR></TABLE>>]// Relationsdjango_view_permission_models_View -> django_view_permission_models_CommonElement[label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];django_view_permission_models_ViewSet -> django_view_permission_models_View[label="views (viewset)"] [arrowhead=dot arrowtail=dot, dir=both];django_view_permission_models_ViewSet -> django_view_permission_models_CommonElement[label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];account_models_BkUser [label=<<TABLE BGCOLOR="palegoldenrod" BORDER="0" CELLBORDER="0" CELLSPACING="0"><TR><TD COLSPAN="2" CELLPADDING="4" ALIGN="CENTER" BGCOLOR="olivedrab4"><FONT FACE="Helvetica Bold" COLOR="white">BkUser</FONT></TD></TR></TABLE>>]django_view_permission_models_ViewPermission -> account_models_BkUser[label="users (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];django_view_permission_models_ViewPermission -> django_view_permission_models_View[label="views (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];django_view_permission_models_ViewPermission -> django_view_permission_models_ViewSet[label="views_set (viewpermission)"] [arrowhead=dot arrowtail=dot, dir=both];django_view_permission_models_ViewPermission -> django_view_permission_models_CommonElement[label="abstract\ninheritance"] [arrowhead=empty, arrowtail=none, dir=both];
}
生成后的文件我没有找到在哪里,就自己建了同名的文件,输入了控制台输出的内容
如果有知道的,欢迎评论区告诉我,或者私信我,不胜感谢
- 生成图片
由于生成的是 dot 格式的图片描述文件,需要使用工具进行转换成常用的 PNG 格式图片。可以下载 graphviz ,并将 /bin/dot.exe 加入系统 PATH 中(安装的时候有添加环境变量提示,勾选即可)。
dot -Tpng django_view_permission.dot > django_view_permission.png
字体默认是 Roboto,可以换成其他的字体
相关文章:
window系统下为django自动绘制模型类关系图
Django 提供第三方包 django-extensions,可以用来将 Django 中的 Models 生成 E-R 图。 1 安装包 pip install django-extensions 2 配置 在 Django settings.py 文件, INSTALLED_APPS 中添加 django_extensions INSTALLED_APPS (django_extension…...
Redis的数据淘汰策略和集群部署
05- Redis的数据淘汰策略有哪些 ? Redis 提供 8 种数据淘汰策略: 淘汰易失数据(具有过期时间的数据) volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少…...
解决CentOS 7无法识别ntfs的问题
解决CentOS 7无法识别ntfs的问题 方式一: Centos默认不支持ntfs文件格式,直接在Centos7上插U盘或移动硬盘无法识别,安装 ntfs-3g即可: # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…...
排名前五的 Android 数据恢复软件
正在寻找数据恢复软件来从 Android 设备恢复数据?本指南将为您提供 5 款最佳 Android 数据恢复软件。浏览这些软件,然后选择您喜欢的一款来恢复 Android 数据。 ndroid 设备上的数据丢失可能是一种令人沮丧的经历,无论是由于意外删除、系统崩…...
Java 程序结构 -- Java 语言的变量、方法、运算符与注释
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 003 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
淘宝/天猫商品详情优惠券获取API 接口
天猫商品优惠券数据API接口是一种用于获取天猫商品优惠券信息的接口。通过该接口,商家或开发者可以获取到商品的优惠券信息,包括优惠券的名称、金额、使用条件等。 该接口的主要参数包括商品ID、优惠券ID等,通过传入这些参数,可以…...
Vue前端ffmpeg压缩视频再上传(全网唯一公开真正实现)
1.Vue项目中安装插件ffmpeg 1.1 插件版本依赖配置 两个插件的版本 "ffmpeg/core": "^0.10.0", "ffmpeg/ffmpeg": "^0.10.1"package.json 和 package-lock.json 都加入如下ffmpeg的版本配置: 1.2 把ffmpeg安装到项目依…...
样式的双向绑定的2种方式,实现样式交互效果
与样式标签实现双向绑定 通过布尔值来决定样式是出现还是消失 show代表着布尔值,show的初始值是false所以文本不会有高亮的效果,当用户点击了按钮,就会调用shows这个函数,并将show的相反值true赋值并覆盖给show,此时show的值为tru…...
供应链经理面试题
供应链经理面试题通常会涉及对供应链管理的基本理解、工作经验、解决问题的能力以及团队协作等多个方面。 请简要介绍一下你在供应链管理领域的工作经验和取得的成绩。你如何定义供应链管理?它在企业中的作用是什么?你认为供应链经理最重要的职责是什么…...
快速理解 Node.js 版本差异:3 分钟指南
Node.js 是一个广泛使用的 JavaScript 运行时环境,允许开发者在服务器端运行 JavaScript 代码。随着技术的发展,Node.js 不断推出新版本,引入新特性和改进。了解不同版本之间的差异对于开发者来说至关重要。以下是一个快速指南,帮…...
【Qt实现录频】
在Qt中实现录制视频可以通过使用Qt Multimedia模块来实现。你可以使用QCamera类来访问摄像头并捕获视频数据。以下是一个简单的示例代码,用于在Qt中实现录制视频: #include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <…...
Golang编译导致的代码错觉
文章目录 背景分析代码疑问 直接上汇编gdb调试优化后的汇编staticunit64s查看禁止优化后的汇编 查看编译过程的SSA生成SSAb对应的SSAc对应的SSAgo官方文档的解释 对比C语言的表现总结 背景 网上看到一段代码,来源是Golang 编译器优化那些事,百思不得其解…...
SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件
SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件 H2 是一个用 Java 开发的嵌入式数据库,它的主要特性使其成为嵌入式应用程序的理想选择。H2 仅是一个类库,可以直接嵌入到应用项目中,而无需独立安装客户端和服务器端。 常用开源数…...
web前端文本大小:从入门到精通的全方位解析
web前端文本大小:从入门到精通的全方位解析 在web前端开发的世界中,文本大小的处理既是基础也是关键的一环。无论是对于初学者还是资深开发者,正确且有效地处理文本大小都显得尤为重要。本文将从四个方面、五个方面、六个方面和七个方面&…...
【报文数据流中的反压处理】
报文数据流中的反压处理 1 带存储体的反压1.1 原理图1.2 Demo 尤其是在NP芯片中,经常涉及到报文的数据流处理;为了防止数据丢失,和各模块的流水处理;因此需要到反压机制; 反压机制目前接触到的有两种:一是基…...
数据挖掘丨轻松应用RapidMiner机器学习内置数据分析案例模板详解(下篇)
RapidMiner 案例模板 RapidMiner 机器学习平台提供了一个可视化的操作界面,允许用户通过拖放的方式构建数据分析流程。RapidMiner目前内置了 13 种案例模板,这些模板是预定义的数据分析流程,可以帮助用户快速启动和执行常见的数据分析任务。 …...
时代巨兽!深度神经网络如何改变我们的世界?
深度神经网络 1、 简介1.1 定义深度神经网络1.2 深度学习的发展历程1.3 深度神经网络的应用领域 2、深度神经网络的基本原理2.1 神经元层2.1.1 神经元2.1.2 神经元层 2.2 前向传播2.3 反向传播2.4 激活函数2.4.1、作用2.4.2、常见激活函数2.4.3、选择激活函数的考虑 2.5 损失函…...
LVS+Keepalived高可用负载均衡群集
目录 一.高可用群集相关概述 1.高可用(HA)群集与普通群集的比较 普通群集 高可用群集(HA) 两者比较 2.Keepalived高可用方案 3.Keepalived的体系模块及其作用 4.Keepalived实现原理 二.LVSKeepAlived高可用负载均衡集群的…...
【MySQL】MySQL45讲-读书笔记
1、基础架构:一条SQL查询语句是如何执行的? 1.1 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 mysql -h$ip -P$port -u$user -p输完命令之后,输入密码。 1.2 查询缓存 MySQL 拿到一个查询请求后,会先到查询缓…...
python:faces swap
# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看: 两个头像图片之间换脸 # 描述: https://stackoverflow.com/questions/902761/saving-a-numpy-array-as-an-image?answertabvotes # Author : geovindu,Geovin Du 涂聚文. #…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...
