本文档基于当前 /opt/web2py-cxmj/applications 目录现状整理,重点参考 service_center 的认证与菜单实现方式,并提供一个可直接复用的空应用模板。
所有新应用必须使用 service_center 的统一认证初始化逻辑,避免各应用重复定义 Auth/DAL,确保账号与会话在各应用间共享。
统一入口模块:
service_center/modules/service_center_auth.py统一调用方式(放在应用 models/00_db.py):
# 共享模块路径:用于跨应用的认证初始化。
shared_modules = os.path.join(request.folder, '..', 'service_center', 'modules')
if shared_modules not in sys.path:
sys.path.append(shared_modules)
from service_center_auth import apply_service_center_auth
apply_service_center_auth(globals())
service_center/databases/storage.sqlite。service_center_auth 内部 Auth.define_tables() 管理,其他应用禁止重复定义或迁移认证表。session.masterapp 建议配置为 service_center(如 private/appconfig.ini 中设置)。全局顶部菜单统一定义在:
service_center/models/xx_menu.py该文件定义 rmenu 并设置:
response.menu = rmenu
其他应用必须加载该菜单文件,避免各应用顶部导航不一致。推荐在 models/00_db.py 中加载:
service_center_menu = os.path.join(
request.folder, '..', 'service_center', 'models', 'xx_menu.py'
)
exec(compile(open(service_center_menu, 'r', encoding='utf-8').read(),
'xx_menu.py', 'exec'), globals())
应用侧边栏菜单放在本应用:
models/menu.py推荐变量名:app_sub_menu。 菜单结构规范(与现有布局兼容):
(标题, 是否禁用, URL, [子菜单...])
示例:
app_sub_menu = [
(T('首页'), False, URL('default', 'index')),
(T('功能分组'), False, '#', [
(T('子页面A'), False, URL('default', 'page', vars={'tab': 'a'})),
]),
]
控制器中统一赋值:
response.sub_menu = app_sub_menu
如需菜单后台管理,可参考:
service_center/models/menu_db.py其中已包含 menu_items 表结构与 get_menu_tree() 方法,适合由后台维护菜单并在页面加载。
公共前端资源建议集中放在:
service_center/static/推荐用途:
service_center/static/css/bootstrap.min.cssservice_center/static/js/jquery.jsservice_center/static/js/bootstrap.bundle.min.jsservice_center/static/css/app.css(全局样式)跨应用引用公共资源时统一使用:
URL('service_center', 'static', 'css/bootstrap.min.css')
URL('service_center', 'static', 'js/jquery.js')
应用私有资源放在本应用 static/ 下,使用:
URL('static', 'css/xxx.css')
每个应用必须维护自己的 views/layout.html,但应保持以下约定:
response.menuresponse.sub_menu{{block head}} 与 {{block scripts}} 注入已创建空应用模板目录:
app_template/
app_template/
├── __init__.py
├── VERSION
├── controllers/
│ └── default.py
├── models/
│ ├── 00_db.py
│ └── menu.py
├── views/
│ ├── layout.html
│ └── default/
│ ├── index.html
│ ├── page.html
│ └── user.html
└── static/
└── images/
└── favicon.ico
service_center 认证库)service_center/models/xx_menu.py)models/menu.py)default/user)index / page)
cp -r app_template 新应用名
controllers/default.py 中的标题、页面逻辑。models/menu.py 生成本应用侧边栏菜单。service_center/models/xx_menu.py。static/。service_center_auth 维护,禁止在新应用内重新定义认证表。response.menu/response.sub_menu 约定)。