Zero框架(v0.03)模板说明
一、简介
模板的使用是为了加快应用的开发速度,在兼顾复用的情况下实现数据程序和页面实现分离。基于模版,程序员和页面设计者可以各司其职,相互配合。程序员开发完毕后,很快能看到应用效果,调通代码,对其中功能性进行验证,保证功能正确。页面设计者和美工,可以通过修改样式表,调整界面元素,对模板的外观进行美化,在有特殊需要时,可以基于原有模版修改生成新模版,也可以设计新页面、新模块,把它转换成新模版。
Zero框架(v0.03)模板,实际是基于python上的Bottle库内置的SimpleTemplate模板引擎来实现的,具体模版语法可以参考Bottle的相关介绍。Zero框架(v0.03)模板可以分为页面模版和组件模版两类。
二、模版用法
模板约定统一存放在应用文件所在目录下views目录中,实际就是可以嵌入python脚本的html文件,利用嵌入的python脚本,可以输出python变量的值,也可以控制html文本的输出。可以通过两种方式来进行调用,一个view装饰器,另一个template函数,可以在调用模版时向模版传递参数,用于控制模版行为,传递要显示内容。
具体用法可参考example.py的“第五部分 功能示例”中的例子。
三、页面模版
页面模版用于页面生成,目前提供了两种风格的页面模版。
- main_example.html
功能: 实现带多层菜单的页面。
输入参数: title: 标题;
content: 详情内容。
参考例子:
示例程序(example.py)的“# 4.1.2 网站首页A”、“# 5.3.2【应用示例】示例2 菜单界面 --查询详情”,效果见图1、图2。
参考语句:
return template('main_example', title='Python应用框架示例',content='<br/><h1>欢迎登录!</h1><br/>')
备注:1)菜单项在\statics\config\menu_config_example.js文件中进行配置。
2)发现该模板在IE8上页面显示不正常,在其他浏览器如360浏览器(内网国产电脑)、Chrome、FireFox、Microsoft Edge、IE11中测试正常。
图1 页面模板main_example效果1
图2 页面模板main_example效果2
2、app_example.html
功能: 实现带下拉菜单的页面,根据输入的title(标题),决定适用的菜单。
输入参数: title: 标题;
content: 详情内容。
参考例子:
示例程序(example.py)的“# 5.2【应用示例】示例1 独立模式 --查询”,效果见图3。
备注:1)菜单项在app_example.html文件中直接进行配置。
2)提供“返回”按钮,默认配置为返回网站首页,可配合实现用户口令修改和退出。
图3 页面模板app_example效果
四、组件模版
组件模版用于生成页面主体的内容,针对性解决有一定普遍性的专门需要,套用模板后生成的结果可以做为传入页面模板的content的值。目前提供了文件上传组件、用户信息组件(含口令修改功能)和几种模式的数据展示组件。
1、DataBox.tpl
功能: 以表格形式展示带标题、字段名的数据表。
输入参数: lable: 标题;
columnLables: 字段名称(以“|”做为间隔符);
dataValues: 要展示的二维数据。
参考例子:示例程序(example.py)的“# 5.2.2【应用示例】示例1 独立模式 --查询详情”。
参考语句:(DataBox模板和zero框架提供的iOracleGet联合使用,三句代码实现一次查询,并将结果勇表格展示的任务。)
sql2='''
select 1 xh, max(substr(SYS_CONNECT_BY_PATH(COLUMN_NAME, ','),2)) col from (
select COLUMN_NAME as COLUMN_NAME,column_id from user_tab_columns where table_name= :key )
start with column_id=1 connect by column_id=rownum
'''
lable2='字段名'
r2=template('DataBox', title='序号|字段名拼接',columnLables=lable2, dataValues=iOracleGet(sql2,{'key':’EMP’}))
2、DataBoxFilter.tpl
功能:
带数据筛选器的数据展示控件,以表格形式展示带标题、字段名的数据表,提供可进行行数据筛选的功能。
输入参数: lable: 标题;
columnLables: 字段名称(以“|”做为间隔符);
dataValues: 要展示的二维数据。
3、FatherDataBox.tpl
功能:
主从查询中的主查询控件,点击数据行,跳转到子查询页面。带标题,可选择提供页面数据筛选功能。
输入参数: lable: 标题;
columnLables: 字段名称(以“|”做为间隔符);
dataValues: 要展示的二维数据;
goToUrl: 跳转去的子数据页面的地址(默认值:./);
keyColID: 关键字段序号(置默认值0,表示第一列值);
Filter: 选择是否显示数据筛选器,值为True表示要显示。
参考例子:
示例程序(example.py)的“# 5.2【应用示例】示例1 独立模式 --查询”,效果见图4。
图4 组件模板FatherDataBox效果
4、ChildrenDataBox.tpl
功能:
主从查询中的子查询控件,根据传来的关键字显示对应数据。带标题,提供传来的关键值显示,可选择提供页面数据筛选功能。
输入参数: lable: 标题;
columnLables: 字段名称(以“|”做为间隔符);
dataValues: 要展示的二维数据;
KeyLable: 关键字标签(默认值“关键字”);
KeyValue: 关键字值(如果不传入关键字值,则不显示);
Filter: 选择是否显示数据筛选器,值为True表示要显示。
参考例子:
示例程序(example.py)的“# 5.2.2【应用示例】示例1 独立模式 --查询详情”,,效果见图5。。
图5 组件模板ChildrenDataBox效果
6、UploadFile.tpl
功能:文件上传模块,提供文件选择、上传功能。
输入参数: title: 标题;
url: 上传处理页面地址;
ftype: 上传文件类型(所属业务文件类别名);
keyName: 关键字名称(如果不传入,对应位置显示“关键字”);
keyValue: 关键字值(如果不传入关键字值,则不显示关键字名称和对应值)。
参考语句:
template('UploadFile', title='XXXX',url='./fbcjxx_scmd/upload',ftype='YYYY',keyName='所属年月',keyValue=datetime.datetime.now().strftime("%Y%m"))
备注:提供简单校验功能,如果未选择文件,点“上传”按钮会提示错误。
图6 组件模板UploadFile效果
7、user.tpl
功能: 用户信息显示模板(含密码修改、退出登录功能)。
输入参数: userID: 用户登录号;
userName: 用户姓名;
remoteAddress: 来访地址;
attach: 附加显示信息(可为空,应为html格式文本,传入后显示在来访地址之后,可根据应用需要酌情使用)。
参考例子:示例程序(example.py)的“# 4.1.3 用户信息(有app权限时显示)”、“# 4.1.4 用户首页B(仅有user权限时,也作为用户信息显示及口令修改页面)”。
参考语句:
template('user',userID=request.auth[0],userName=’XXXX’,remoteAddress=request.environ.get('REMOTE_ADDR'),attach=appList_html)
备注:1)页面带三个按钮:“返回”按钮返回上一页;“修改密码”会在该模块下面展开修改密码相关功能;“退出登录”会退出当前的用户登录。
2)点击“确认修改”按钮提交密码修改请求后,会先做两个检查,一是两给输入的新口令是否一致;二是密码长度应在4-30位之间(可通过编辑模板文件中的名为check的javascript函数,对校验规则予以增改)。校验通过后,默认统一以post方式提交到“/changePWD”页面进行处理。
3)点击“退出登录”按钮后,后续会转到“/logout”页面执行退出相关操作。
(此处略)
图7 组件模板user效果
(此处略)
图8 组件模板user修改密码界面
银河软件工作室
2023年2月10日