status |
正式 |
完成度:95% |
1. KDay 2:~ 通过表单直接完成功能!
不管37,21!直接完成心目中的功能,先,,,
小白秉承之前的习惯,先计划当日期望达成的目标:
可以直接读取原先的问卷设计 .ini 文本, 显示到页面中的 文本框(<TEXTAREA></TEXTAREA>) 中
- 可以提交包含问卷设计文本框的表单,并将内容保存到服务器上的指定目录中,完成问卷的更新;
1.1. 规划
行者 ‘Rockety’ 对KarriGell 的设置有很好的介绍
脚注:: Rockety 的Karrigell 使用体验, 访问地址:http://wiki.woodpecker.org.cn/moin/RocketyKarrigell 精巧地址:http://bit.ly/3wEwn3 另外在 PCS301 中也对最常用部分的配置进行了说明
小白参考之从新规划了一下站点的开发, 对 /path/to/Karrigell/conf/Karrigell.ini 相关部分进行修订
... [Alias] .. q=%(base)s/KDays
追加这一行设置行,这样一来,就可以通过
http://localhost:8081/q/kday2/ 来访问今天的开发成果了! 当然没有在 obp 目录中安置index.htm/index.pih 之类的默认首页 KarriGell 是不会让小白看到什么的说……
简单点儿吧!
# 约定以下全局性变量 qpath = "q/" pubq = qpath+"easy051201.cfg"
- 使用这样的全局变量定义下来,使用 Leo 快速的将所有的文件控制起来
- 计划就是这样的:
http://localhost:8081/q/kday2/mana.pih 看到并可以编辑 ini 问卷设计文稿,点击提交后转到
http://localhost:8081/q/kday2/qpage.pih 可以看到真正保存下来的问卷设计内容
1.2. Cheetah
小白很早之前就从身边的师兄师姐那儿就模糊的听说过 MVC 模式,说是什么将 数据模式/前端表现/业务控制 分层实现等等; 在这个简单的连数据库都没有实例小项目中,顶多是 VC 分层了,咨询了一下技术列表,有行者推荐说模板系统中 Cheetah 非常的好和稳定, 那就先尝试它了!
小小看一下子示例,知道 Cheetah 的基本使用是这样的:
1 from Cheetah.Template import Template # 0. 引入模板
2 page = open("你的模板文件.tmpl","r").read() # 1. 加载模板
3 vPool = {'cfgtxt':"随便什么字串的值就成"} # 2. 加载数据
4 print Template(page, searchList=[vPool]) # 3. 渲染输出`
则模板文件中有 $cfgtxt 的地方就会替换为实际数据
模板文件就是标准的HTML文件,只是各个期望有动态数据出现的地方,变成了 $开头的变量名
$开头的变量名 只要在合适的时机,先于print Template() 完成赋值就好
- 例如以下模板文件片段
<!--你的模板文件.tmpl; 其实模板文件可以使用任何后缀名的,甚至是.exe 只要内容是纯文本的,但是为了统一,建议还是使用一看就知道是模板的后缀 --> <H2>$cfgtxt</H2>
详细:: PCS309 模板系统 综合列举了流行的一些Web应用模板系统, 分享了一些实用的模板选择和使用体验 有关 Cheetch ~ 印度豹模板系统的简要介绍在: http://wiki.woodpecker.org.cn/moin/CheetahTemplateOrg
1.3. Leo 组织实现
小白已经习惯了通过 Leo 在一个统一界面中把握程序的全部逻辑层次/章节/元素 ;-)
- 可以使用中文作章节名目:
问卷来组织设计文案
就是@nosent easy051201.cfg
当然要使用@path q 来配合,这样你对 easy051201.cfg 的修改可以立即输出为具体的文件
Ctrl+Alt+c和Ctrl+Alt+v 是 Leo 中的复制和粘贴操作:
快速从原先的 @nosent index.pih 复制整个节点为
@nosent mana.pih 管理页面入口
@nosent questionnaire.tmpl 修改问卷模板,Cheetah的
1.3.1. VC分层
至此,小白组织好了自个儿的'VC'实现:
@nosent mana.pih 虽然几乎是纯HTML页面,但是通过<%Include("qdesign.py")%> 来包含一个纯操作脚本,算数据控制(Control)层?
@nosent questionnaire.tmpl 模板,算表现(View)层?
嗯嗯嗯,原来所谓分层实现,就是将自然的作法,起个NB的名称...
1.3.2. 八股文样
模式化的处理脚本
- 从文学化编程角度看,web 应用的前端应用脚本,应该说都一个样儿!
图 KDay2-1 使用 Leo 规格化的功能页面设计情景
- 即:
脚本说明 @...@c 部分
脚本声明 << page declarations >> 引用的下层部分
行为定义 @others 包含的所有下级节点
实际尝试 <<try>> 引用的下层部分
1.4. 编辑实现
其实就是将指定的文件内容读出来发布到页面的输入框(<TEXTARE/>) 中
模板中先准备
<textarea NAME="cfgfile" rows="27" > $cfgtxt </textarea>
处理脚本中
1 #简化引用对象名 2 from Cheetah.Template import Template as ctTpl 3 vPool = {} 4 vPool['cfgtxt'] = open(pubq,"r").read() 5 page = open("questionnaire.tmpl","r").read() 6 txp = ctTpl(page, searchList=[vPool]) 7 print txp
- Bingo! 完成!
图 KDay2-2 问卷设计主页面
1.5. 展示实现
就是将ini 的内容整理为HTML的页面展示
- 同样的快速组织一下子:
@nosent qpage.pih 访问的页面 http://localhost:8081/q/kday2/qpage.pih
@nosent qpage.py 实际的数据重组
1.5.1. 关键代码
from dict4ini import DictIni 当然的是使用 Limodou 贡献出的 dict4ini.py ~ 字典化ini 操作模块
创建def expage(dict): 问卷输出函式,来将ini 内容整理为相应的页面
1 exp +="<ul>" 2 # 将字串的字典键值依照数字方式排序 3 k = [int(i) for i in dict.ask.keys()] 4 k.sort() # 没有回传的数组重整处理 5 for i in k: 6 ask = dict.ask[str(i)] 7 exp +="<li>%s"%ask["question"] 8 exp +="<ul>" 9 qk = [j for j in ask.keys()] 10 qk.sort() 11 for q in qk: 12 if 1==len(q): 13 exp +="<li>%s"%ask[q] 14 else: 15 pass 16 exp +="<p>正确答案::%s</p>"%ask["key"] 17 exp +="</ul>" 18 exp +="</li>" 19 exp +="</ul>" 20 return exp
上述代码中的双层循环就可以对应的将所有类似[ask/1] 的问题,以及其中的所有
类似a = 赞! 的选择项按照列表的形式输出了!
图 KDay2-3 问卷设计文本解析输出的页面效果
详细:: PCS208 dict4ini 知名行者 Limodou 从UliPad 项目中贡献出来的对象化操作 ini 配置文本支持模块; 在PCS208 中分享了基本技巧
1.6. 串联页面
将编辑页面和展现页面串联起来
当然的要使用 HTML 表单元素 ~ <FORM/>,利用内置的提交声明 ACTION 就可以了,例如:
<FORM ENCTYPE="multipart/form-data" ACTION="qpage.pih" METHOD=POST>
在模板中补充以上声明;
测试为先! 在 qpage.py 中加入print QUERY 确认倒底表单传送过来了什么
图 KDay2-4 使用Karrigell 内置对象 QUERY 观察表单提交
OK! 一切吻合想象的确是个字典对象的传送,键就是 <TEXTAREA/> 元素的 NAME;
得到问卷设计文本的修订内容后,就可以简单的通过 open(qpath+pubq,"w").write(QUERY["cfgfile"])
- 将传送来的编辑成果先写回文件, 再由后续操作整理展现, 这已经不是问题了..
1.7. 明日目标
实现了最基本的编辑到保存,还有问卷展示的脚本那未自然的:
- 实现可以真实使用的问卷表单哪!
1.8. 实例下载
使用SVN下载地址:
kday2/ |-- dict4ini.py Limodou 贡献的 ini 解析模块 |-- q/ 问卷设计文本收藏目录 | `-- easy051201.cfg 第一份问卷设计 |-- mana.pih 问卷设计页面 |-- qdesign.py 问卷设计实际行为脚本 |-- qpage.pih 问卷展示页面 |-- qpage.py 问卷展示实际行为脚本 `-- questionnaire.tmpl 问卷展示模板
图 KDay2-5 本日完成的所有页面在Leo 中的组织情景
Upload new attachment "kday2-leo-all.png"
1.9. 练习
- 在前面章节练习mysite的基础上, 完成以下功能:
- (1) 增加编辑页面(edit.pih), 增加编辑输入框, 并保存入本地文件, 转入首页index.pih显示刚刚输入的内容, 类似于制作个人博客的编辑页面; 具体页面分布可参考png中截图;
- (2) 允许文章的多次修改及删除, 并能体现在首页index.pih中;
(3) 提示: 各个文章可以保存为.cfg格式, 该格式文件的处理可参见ConfigParser的使用.
返回 KDays实例故事
::-- ZoomQuiet [2005-12-11 04:45:50]