django项目数据库设计文档生成
直接上代码
使用说明
按照步骤 TODO1、TODO2、TODO3 之后运行文件,数据库设计文档生成在当前目录下
# Desc : django项目生成doc文档
# TODO 注: model的Meta属性和字段属性记得添加verbose_name属性,apps.py需要添加verbose_name
# TODO 1. 复制项目DJANGO_SETTINGS_MODULE的值
# TODO 2. 在项目settings.py中配置 PROJECT_NAME(项目名称)
# TODO 3. 需要修改此自建app的列表 model_doc_apps的值
import os
import sys
import django
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# TODO 1 复制项目DJANGO_SETTINGS_MODULE的值 替换 radio_station_design.settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "radio_station_design.settings")
django.setup()
# TODO 3 需要导出的model模块
model_doc_apps = ['usermanage', 'station', ]
from django.apps import apps
# TODO 2 导入PROJECT_NAME(自定义项目名称)
from radio_station_design.settings import PROJECT_NAME
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Inches, Pt, RGBColor
from datetime import datetime
class MyDoc:
"""生成docx文档"""
def __init__(self, out_path, project_name='项目名称'):
self.project_name = project_name
self.out_path = out_path
self._get_doc()
def _get_doc(self):
self.document = Document()
def add_heading(self, head, level=1):
"""自定义的标题格式"""
# heading = self.document.add_heading(head, level)
if not 0 <= level <= 9:
raise ValueError("level must be in range 0-9, got %d" % level)
style = "Title" if level == 0 else "Heading %d" % level
p = self.document.add_paragraph(style=style)
space_size = 11 - level
# 段前间距
p.paragraph_format.space_before = Pt(space_size)
# 段后间距
p.paragraph_format.space_after = Pt(space_size)
p_run = p.add_run(head)
p_run.font.name = u"仿宋"
if level:
p_run.font.color.rgb = RGBColor(0, 68, 136)
# 加粗
p_run.bold = True
# 字体大小
font_size = 28 - level * 2
p_run.font.size = Pt(font_size)
return p
def set_title(self):
"""设置标题以及生成日期"""
title = self.document.add_heading(self.project_name + "数据库设计", 0)
title.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
p = self.document.add_paragraph()
p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
# 右侧缩进
p.paragraph_format.right_indent = Pt(4)
pp = p.add_run("文档生成时间:" + datetime.now().strftime("%Y-%m-%d"))
pp.font.size = Pt(16)
def generate_doc(self):
"""生成文档固定部分"""
# 生成doc文档
self.set_title()
self.add_heading('引言', level=1)
self.add_paragraph(""