# -*- coding: utf-8 -*-
import traceback
from django.db.models import get_app,Model
from django.conf import settings
from django.http import HttpResponse
import settings
def db_info(request):
models = {}
for app_name in settings.INSTALLED_APPS:
try:
app_name = app_name.split(".")[-1]
app = get_app(app_name)
app_models = []
app_verbose_name = u"%s"%app.verbose_name if hasattr(app,"verbose_name") else u"没有配置说明{rd}".format(rd=app_name)
for att in dir(app):
try:
m = getattr(app,att)
if issubclass(m,Model) and (m._meta.app_label == app_name or m._meta.app_label == "auth"):
m_info = {
"dbname":settings.DATABASES[m.Admin.using_db]["NAME"] if hasattr(m,"Admin") else settings.DATABASES["default"]["NAME"],
"db_table":m._meta.db_table,
"verbose_name":u"%s"%m._meta.verbose_name,
"fields":[]
}
for f in m._meta.fields:
db_name = f.get_attname_column()[1]
verbose_name = u"%s"%f.verbose_name
db_type = f.get_internal_type()
max_length = f.max_length if f.max_length else ""
help_text = f.help_text
m_info["fields"].append({
"db_name":db_name,
"verbose_name":verbose_name,
"db_type":db_type,
"max_length":max_length,
"help_text":help_text,
})
app_models.append(m_info)
except:
pass
#traceback.print_exc()
if app_models:
models[app_verbose_name] = app_models
except:
traceback.print_exc()
model_table_html = u"""
<div>
数据库名称:%(dbname)s
模型名称:%(verbose_name)s
数据库表名称:%(db_table)s
</div>
<table class="table">
<thead>
<th>数据库字段</th>
<th>字段说明</th>
<th>字段类型</th>
<th>字段长度(数字类型为空)</th>
<th>字段详细说明</th>
</thead>
<tbody>
%(body)s
</tbody>
</table>
<br/><br/>
"""
html = u"""
<html>
<head>
<style>
.table,.table tbody td, .table thead th {
border-color: #CDD7E3;
border-style: solid;
}
table thead{background-color:silver;}
.table{border-width: 1px 0 0 1px !important;border-spacing: 0;}
</style>
</head>
<body>
%(body)s
</body>
</html>
"""
apps_html = []
for app_verbose_name,tables in models.items():
all_models_html = [u"""<div style="color:blue">子系统*********%s************</div>"""%app_verbose_name]
for table in tables:
verbose_name = table["verbose_name"]
db_table = table["db_table"]
dbname = table["dbname"]
bodys = []
for f in table["fields"]:
#print 'f f["help_text"]===',app_verbose_name,verbose_name,f["db_name"],f["help_text"]
bodys.append(u"""
<tr>
<td>%(db_name)s</td>
<td>%(verbose_name)s</td>
<td>%(db_type)s</td>
<td>%(max_length)s</td>
<td>%(help_text)s</td>
</tr>
"""%{
"db_name":f["db_name"],
"verbose_name":f["verbose_name"],
"db_type":f["db_type"],
"max_length":f["max_length"],
"help_text":f["help_text"],
}
)
m_html = model_table_html%{
"body":u"".join(bodys),
"verbose_name":verbose_name,
"db_table":db_table,
"dbname":dbname,
}
all_models_html.append(m_html)
apps_html.append(u"".join(all_models_html))
return HttpResponse(html%{"body":u"".join(apps_html)})