Size: 554
Comment:
|
Size: 7306
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 9: | Line 9: |
不爽直!使用新的KS服务形势 | || attachment:snap-KwDay40-3Leo.png ||'''不爽直!开始新的KS 页面组织'''[[BR]]现在想来,你实现了三个小功能就用了7,8个文件……有些想念CherryPy 的对象式网站发布了!|| |
Line 12: | Line 12: |
'''学习一下子文档吧!''' * http://localhost/demo/ksTest.ks/index * {{{#!python so = Session() if not hasattr(so, 'x'): so.x = 0 def index(): print "x = %s" %so.x print '<br><a href="increment">Increment</a>' print '<br><a href="decrement">Decrement</a>' print '<br><a href="reset">Reset</a>' def increment(): so.x = _private(so.x) raise HTTP_REDIRECTION,"index" def decrement(): so.x -= 1 raise HTTP_REDIRECTION,"index" def reset(): so.x = 0 raise HTTP_REDIRECTION,"index" def _private(x): """The function name begins with _ : internal function, can't be call by a url""" return x+1 }}} 不是吧!! 一个页面就作完了四种动作!完全是CherryPy 味的!! * Session 完全是对象了,标准的KarriGell 内置对象! * 又不是CherryPy 那样严格的对象属性,是文件级别的全局性变量,容易引用! * 但是,还是要在优雅的Python 脚本中掺杂HTML 代码,不爽直! |
|
Line 15: | Line 44: |
http://localhost/doc/en/htmltags.htm | * http://localhost/doc/en/htmltags.htm * 唉呀呀!!还真的是心想事儿成!2.2 增加的新功能哪! {{{#!python stylesheet = LINK(rel="Stylesheet",href="doc.css") header = TITLE('Record collection')+stylesheet title = H1('My record collection') rows = Sum ([TR(TD(rec.title,Class="title") +TD(rec.artist,Class="Artist")) for rec in records]) table = TABLE(TR(TH('Title')+TH('Artist')) + rows) print HTML(HEAD(header) + BODY(title + table)) }}} 可以将一个标准的HTML页面由几行 Py脚本自然生成! * 那未,只要结合 KS 和 HTMLTags 功能就可以快速实现想要的复杂展示功能了!还可以方便的复用! * 当然的使用["Leo"] 八股化你所有的.KS attachment:snap-KwDay40.png |
Line 17: | Line 61: |
1. `<< page declarations >>` 同样是引用声明什么的 1. `<< htmlcode >>` 就是利用["Leo"]来快速复用的各种 HTML 代码 1. `<<ini>>` 初始化部分,就是各响应页面都要使用的变量准备 1. `@others` 包含以下各种 `def action():` 样定义的实际响应页面和`def _function():` 可以反复调用的不作为页面响应的普通函式声明 == 登录 == '''从默许的index 自动导向 login 那''' * 在{{{#!python def index(): << pagehead >> if sess.usr["name"]=="NULL": raise HTTP_REDIRECTION,"login" else: pass }}} 照猫画虎, 使用`raise HTTP_REDIRECTION,"login"` 来根据是否有登录过来导向登响应 * 当然的,要在 .KS 的 ini 初始化部分先声明会话容器: {{{#!python # 使用 Session来记忆成员信息 sess = Session() if not hasattr(sess, 'usr'): sess.usr = {"name":"NULL"} }}}在没有进行登录前,准备一个值为`NULL` 的`usr` 用户会话对象 * 好了,实际的登录表单还是 [http://www.orionlab.net/karrigell_quickform/Karrigell_QuickForm.html KQF]来干: {{{#!python p = Karrigell_QuickForm('fm_login' ,'POST' ,'chkusr' ,"登录自学问卷") p.addHtmNode('text','uname' ,"staff帐号" ,{'size':40,'maxlength':8}) p.addGroup(["submit","btn_submit","提交","btn"] ,["reset","btn_reset","重写","btn"]) p.addRule('uname','required' ,"成员名是必须的!Login name is required!") p.display() }}} 非常简洁,标准 * 进行有效性判别的处理也是个标准的KS 函式{{{#!python def chkusr(**args): """检查用户登录情况 """ print QUERY sess.usr["name"] = QUERY["uname"] if sess.usr["name"] in pmguys: # pmguys 是个元组,预定义的有管理整理的成员帐号 sess.usr["pm"] = 1 print sess.usr #raise HTTP_REDIRECTION,"index" }}}先别让页面自动跳走,看一看,是否随愿的将登录信息记录了?! |
|
Line 18: | Line 112: |
attachment:snap-KwDay4sess.png | |
Line 19: | Line 114: |
* 问卷的使用原则是,任何人都可以登录,问答,但是: 1. 只有有效的成员问答才会统计 1. 只有个别的成员才有管理/编辑问卷的权限 == 多问卷选择 == ''' 有了登录后的用户信息,就可以根据不同的角色进行处理了''' === fnmatch === * 指定目录中某模式的所有文件的尋找………… * 有内置的处理模块哪!'''fnmatch''' * 配合统一设置进行搜索{{{#!python qcfglist = [] for f in os.listdir(conf.qpage.qpath): if fnmatch.fnmatch(f, '*.cfg'): if ("__init__" in f): pass else: qcfglist.append(f) print qcfglist }}} 就可以找出目录中所有以`.cfg`结尾的文件! * conf 对象是新发布模式下的统一设置信息对象 * 因为,担心可能需要多个.KS 文件来组织网站,不想象原先那样滥用["Leo"]来复用信息了 * 所以,建立`@nosent questionnaire.cfg` 统一配置文件 * 这样,`conf = DictIni("questionnaire.cfg")` 一下子,就可以在所有.KS 页面中获取统一的站点设置了 === 列表所有问卷 === '''根据问卷的状态进行归类列表''' {{{#!python # 识别问卷发布情况:: qdone = {} qdoing = {} qdesign = {} for p in qcfglist: cfgp = DictIni(conf.qpage.qpath+p) if 0==cfgp.desc.done: qdesign[p]=cfgp elif 1==cfgp.desc.done: qdoing[p]=cfgp elif 2==cfgp.desc.done: qdone[p]=cfgp else: qdesign[p]=cfgp }}} 使用不同的字典容器先过滤一下子搜索出来的文件; * 然后使用类似的输出就好: {{{#!python print H4("问卷进行中::") print UL("".join([str(LI( B(A(qdoing[i].desc.pname ,href="page?qpname=%s&do=doing"%i.split(".")[-2]) )+ SUP(qdoing[i].desc.learn)+ SUB(A("问答统计",href="stat?qp=%s"%i)) ) ) for i in qdoing.keys() ]) ) }}} attachment:snap-KwDay4list.png == 明日任务 == '''心情舒畅!快速的完成了更加简练的功能页面!''' * 但是,如何将编辑,回答,统计融合起来? 1. 点击进入不同问卷,可以回答/或是编辑 1. 点击编辑就直接编辑 1. 提交就成为新版本问卷 1. 问卷要有版本管理 1. 提交后,可以立即回到问答或是问卷集首页 1. 任何页面都有安全退出的链接 1. .... 呜乎哀哉,好象越作越多了,任务………… |
|
Line 24: | Line 189: |
== 讨论 == [[Include(/Discuss)]] |
::-- ZoomQuiet [DateTime(2005-12-11T04:45:50Z)] TableOfContents
1. K4日:KS
1.1. lovely session
学习一下子文档吧!
1 so = Session() 2 if not hasattr(so, 'x'): 3 so.x = 0 4 def index(): 5 print "x = %s" %so.x 6 print '<br><a href="increment">Increment</a>' 7 print '<br><a href="decrement">Decrement</a>' 8 print '<br><a href="reset">Reset</a>' 9 10 def increment(): 11 so.x = _private(so.x) 12 raise HTTP_REDIRECTION,"index" 13 def decrement(): 14 so.x -= 1 15 raise HTTP_REDIRECTION,"index" 16 def reset(): 17 so.x = 0 18 raise HTTP_REDIRECTION,"index" 19 def _private(x): 20 """The function name begins with _ : internal function, 21 can't be call by a url""" 22 return x+1
不是吧!! 一个页面就作完了四种动作!完全是CherryPy 味的!!
1.2. HTMLTags
函式化的HTML生成
- 唉呀呀!!还真的是心想事儿成!2.2 增加的新功能哪! 可以将一个标准的HTML页面由几行 Py脚本自然生成!
1 stylesheet = LINK(rel="Stylesheet",href="doc.css") 2 header = TITLE('Record collection')+stylesheet 3 title = H1('My record collection') 4 rows = Sum ([TR(TD(rec.title,Class="title") 5 +TD(rec.artist,Class="Artist")) 6 for rec in records]) 7 table = TABLE(TR(TH('Title')+TH('Artist')) + rows) 8 print HTML(HEAD(header) + BODY(title + table))
- 那未,只要结合 KS 和 HTMLTags 功能就可以快速实现想要的复杂展示功能了!还可以方便的复用!
- 当然的使用["Leo"] 八股化你所有的.KS
attachment:snap-KwDay40.png
<< page declarations >> 同样是引用声明什么的
<< htmlcode >> 就是利用["Leo"]来快速复用的各种 HTML 代码
<<ini>> 初始化部分,就是各响应页面都要使用的变量准备
@others 包含以下各种 def action(): 样定义的实际响应页面和def _function(): 可以反复调用的不作为页面响应的普通函式声明
1.3. 登录
从默许的index 自动导向 login 那
在
照猫画虎, 使用raise HTTP_REDIRECTION,"login" 来根据是否有登录过来导向登响应
- 当然的,要在 .KS 的 ini 初始化部分先声明会话容器:
在没有进行登录前,准备一个值为NULL 的usr 用户会话对象
好了,实际的登录表单还是 [http://www.orionlab.net/karrigell_quickform/Karrigell_QuickForm.html KQF]来干:
1 p = Karrigell_QuickForm('fm_login'
2 ,'POST'
3 ,'chkusr'
4 ,"登录自学问卷")
5 p.addHtmNode('text','uname'
6 ,"staff帐号"
7 ,{'size':40,'maxlength':8})
8 p.addGroup(["submit","btn_submit","提交","btn"]
9 ,["reset","btn_reset","重写","btn"])
10 p.addRule('uname','required'
11 ,"成员名是必须的!Login name is required!")
12 p.display()
非常简洁,标准
进行有效性判别的处理也是个标准的KS 函式
先别让页面自动跳走,看一看,是否随愿的将登录信息记录了?!
attachment:snap-KwDay4sess.png
- 问卷的使用原则是,任何人都可以登录,问答,但是:
- 只有有效的成员问答才会统计
- 只有个别的成员才有管理/编辑问卷的权限
1.4. 多问卷选择
有了登录后的用户信息,就可以根据不同的角色进行处理了
1.4.1. fnmatch
- 指定目录中某模式的所有文件的尋找…………
有内置的处理模块哪!fnmatch
配合统一设置进行搜索
就可以找出目录中所有以.cfg结尾的文件!
- conf 对象是新发布模式下的统一设置信息对象
- 因为,担心可能需要多个.KS 文件来组织网站,不想象原先那样滥用["Leo"]来复用信息了
所以,建立@nosent questionnaire.cfg 统一配置文件
这样,conf = DictIni("questionnaire.cfg") 一下子,就可以在所有.KS 页面中获取统一的站点设置了
- conf 对象是新发布模式下的统一设置信息对象
1.4.2. 列表所有问卷
根据问卷的状态进行归类列表
使用不同的字典容器先过滤一下子搜索出来的文件;
- 然后使用类似的输出就好:
attachment:snap-KwDay4list.png
1.5. 明日任务
心情舒畅!快速的完成了更加简练的功能页面!
- 但是,如何将编辑,回答,统计融合起来?
- 点击进入不同问卷,可以回答/或是编辑
- 点击编辑就直接编辑
- 提交就成为新版本问卷
- 问卷要有版本管理
- 提交后,可以立即回到问答或是问卷集首页
- 任何页面都有安全退出的链接
- .... 呜乎哀哉,好象越作越多了,任务…………
1.6. 实例下载
使用 [wiki:self/AllAboutSubversion SVN 下载]:
[wiki:selfsvn/zqlib/trunk/zqlib/tangle/zoomq/Karrigell/obpKWD/KwDay4/ KwDay4实例]
1.7. 讨论
返回 KarrigellWebDev -- 快速体验K开发