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 涂聚文. #…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
