status

正式

ZoomQuiet

完成度:98%

1. KDay 1:品尝KarriGell

快速根据现成的PHP实现思路,尝试Karrigell 的开发

1.1. 背景

  • 原先的问卷系统:
    • 其实就是一组手工写成的非常简单的PHP页面,每个页面包含一个选择题,点击"下一题"就可以将每个人对应的回答记录到数据库中;然后通过数据库的查询进行成绩统计;
    • 小白学习了Python后,首先写了个脚本,可以从 .ini 文本中自动批量生成相似的PHP页面:
      • 每个节[ask/1]类似开头的一系列键值对,对应生成一个选择题

      • key=一项记录了正确答案的选择项

    • 然后配套也写了自动查询DB,统计出回答过问卷的成员成绩的Python脚本
    • 所以,现在的问卷生成流程是:

      .ini(txt) -> Python -> PHP -> DB -> Python -> 答巻统计
      
    • 这样的数据流程真够傻的~经过了太多手续,使用了太多的语言和系统,而且作不到答卷成绩的立等可取!

注意:: 
PHP ~ Personal Hypertext Preprocesser
个人超文本解析语言
是种专门针对互联网应用设计的快速功能型语言,
对于网站开发有独到的处理思路,
但是不属于本书分享的范畴,请读者自行搜集相关文档学习吧;
TisonG!

1.2. 准备环境

总算得空,小白立即想尝试使用纯 Python 的重构出一个可快速修改+统计成绩的简单问卷系统.

详细: 
PCS404 代码重构浅说
重构~Refactoring 是现代软件开发工程中常用技巧,
可以保证系统在可用状态下持续不断的提高代码品质!
在PCS404 中,浅显的说明了一下 重构 思想以及常见的重构技巧
为什么选择KarriGell?
  • 小白想这么回答:"缘分吧...嗬嗬嗬!"
  • 真实原因就是:"懒!" 毕竟在前述CDays 实例故事中,在Python 学习过程中,小白已体验过了 KarriGell,当然,就手先使用熟悉了的哪,哈哈哈!

详细: 
PCS301 Karrigell
分享了这一被选中的号称最简易好用的应用框架的基本配置和开发使用体验;
就在本书前一部分,CDays故事中,最后小白就是使用的这种框架;
立即开始!
  • 下载KarriGell

     下载地址: http://sourceforge.net/projects/karrigell
     快捷访问: http://tinyurl.com/6bpc3f 

    一般是个单独的压缩文件,比如说:Karrigell-2.3.6.tar.bz2

  • 首先,使用工具解开压缩(推荐使用 7-zip 这一自由软件,通吃一切常见压缩包! http://7-zip.org/zh-cn/)

  • 然后,进入 KarriGell 所在目录

  • 最后,在命令行下面输入:python Karrigell.py

    • M$用户的命令行环境调用: 开始->命令->输入"cmd" (或是你习惯的任何M$终端软件)

  • Unix/Linux用户: 应用程序->附件->终端 (或是其它任何你喜欢的终端软件)

  • bingo! 通过 http://localhost/ 小白就已经获得了一个展示有各种应用的 KarriGell 站点了!

图 KDay1-1 默认首页

  • 这也意味着,只要有Python环境,我们可以在任何平台中,随时可以获得一个全功能的Web 应用环境!

1.3. 动手动脚

跟着教程走,随便动一动

  • 默认的 KarriGell 站点中,就含有教程!

  • http://localhost/demo/frame_tour_zh.htm 是最简要入门教程,展示了KarriGell 进行 web 开发中最经常要面对的应用实现

    • 图 KDay1-2 内置中文教程

  • 小白也算修炼过Pythonw编程的,当然对于"hello world"这样的示例已经没有兴趣了,想直接行进交互式的Web应用开发
  • 经过行者的点拔,注意到有种 .pih 发布方式,最象原先的 PHP 页面,可以将执行代码嵌入到HTML页面中

  • 根据内置教程的演示,小白直接对原有的页面 http://localhost/demo/test.pih 进行修改尝试:

    <h2>HTTP headers</h2>
    <%
    a="Karrigell"
    print dir(a)
    %>
    
    • 嗬嗬!!果然和命令行中的反应一样,看来就将KarriGell 想象为面向 Web 的Python 解释器好了! 图 KDay1-3 打印dir()的页面输出

1.4. 组织开发环境

OK!我期望可以随时看到教程,同时又有独立的站点空间……

  • 小白好不容易学习,掌握了 Leo ,而且感觉一切都应该由 Leo 组织才自然

  • 那么就按照习惯来定制KarriGell 一下子:

    • 其实 KarriGell 的设置非常的简单的,由统一的 ini 文件来设定整体行为

    • 现在的需求非常简单,就是将KarriGell 的默许教程站点和小白自个儿的开发隔离开,以便开发的同时不影响随时参考内置教程,所以查找有关目录别名的配置...

      [Alias]
      ...
      # demo=%(base)s/demo
      doc=%(base)s/doc
      debugger=%(base)s/debugger
      
    • Yeah! 就是这里,非常直观,那么定义一个自个儿开发的站点目录在 KarriGell 系统目录中就好

      • 嗯嗯……得感谢Unix 系统中的 link 命令!小白可以将开发中的问卷系统文件放在任何习惯的目录中,仅仅链接到KarriGell 的环境目录中就完成了自个儿的应用安装; 如果在 M$ Windows 环境中就只能真的在其中建立目录了;

比如说;在Linux 中,小白的 EasyPage 工程组织在:
/home/zoomq/0penproj.s/lovpy.OBP/KDays
而下载安装的 Karrigell 在:
/home/zoomq/0penproj.s/trunk/karrigell/trunk
则小白只要运行:
$ ln -s /home/zoomq/0penproj.s/lovpy.OBP/KDays/kday1 \
  /home/zoomq/0penproj.s/trunk/karrigell/trunk/webapps/
就等于在 /home/zoomq/0penproj.s/trunk/karrigell/trunk/webapps/ 中安装好了 
/home/zoomq/0penproj.s/lovpy.OBP/KDays 中的 kday1 目录;
然而在 M$ Windows 环境中,小白除了可以将 kday1 目录复制过去,没有任何方法;
这样,小白想灵活的将不同目录中的不同工程目录安装到 不同版本的 Karrigell 实例环境中,就无能为力了..
  • 首先,习惯性的在 Leo 中设立好自个儿的工程,组织一个最简单的 index.pih:

    <html><body>
    <%
    a="Kariigell"
    print dir(a)
    %>
    </body></html>
    
  • 嗯嗯……为了方便, 使用Leo在节点声明 @nosent 操作符,以便按下 Ctrl+S 时,就自动在指定的目录里保存了对应文件 图 KDay1-4 Leo界面中的情景

详细:: 
PCS310 Leo
分享了什么是文学化编辑环境,
以及利用文学化视角来组织软件工程时的最佳体验;
这里的 @nosent 是指Leo中结点的特殊名称,
可以引起不同的系统响应的名称,具体的参考
PCS310 Leo
  • 对应的,在配置文件: Karrigell.ini 中设定一下

    [Alias]
    ...
    k=%(base)s/webapps/KDays
    ...
    
  • OK! 重启一下子KarriGell ,当然, Ctrl+C 是在Linux/Unix 系统中的通用操作,令 KarriGell 的Python 进程停止

  • 然后再运行 python Karrigell.py

  • 那么访问: http://localhost/k

    • 嗬嗬,一切如愿! KarriGell 正如小白想象的有了实时的反应,不象CherryPy 每次修改,都要重启服务

    • KarriGell 中,就象PHP开发那样,每次修改好后,刷一下子页面,立即你的修改就能显示出来

图 KDay1-5 页面输出和服务运行对比

1.4.1. 小技巧

[Directories]
...
allow_directory_listing = 1

在实际开发过程中,经常要查看实际发布目录中有什么内容,打开配置文件中的上述配置项, Karrigell 将自动发布没有默认首页的目录内容索引,

图 KDay1-6 默认的目录内容索引样式

1.5. 小结

今天任务
  • 评估KarriGell的可用性--已经达成!

  • 嗬嗬,其实就是简单的确定 KarriGell 的应用开发/组织方式

明日计划
  • 对于"简单问卷"本身,先要完成的是怎么在KarriGell 中读人外部文件,并可以在页面中修改,然后提交保存...

  • 是利用大侠 Limodou 自创的 Dict4Ini 模块来理解问卷的设计,并将问答收集为一系列文件,最终仍由Python 进行统计成绩...

详细:: 
PCS208 dict4ini
分享了专门用以解析和输出 .ini 类 M$ Windows 配置文件文本的支持模块的基本使用思路;
这是 UliPad 作者Limodou自个儿组织分享出来的

1.6. 实例下载

使用SVN下载地址
本日成果

kday1/
|-- q/                  问卷设计文本收藏目录
|   `-- easy051201.cfg  第一份问卷设计
`-- try.pih             第一个动态页面

2. 练习

  • 经过这一节的学习, 熟悉Karrigell.ini基本设置和基本环境部署后(可参考README.txt中), 创建一个自己的站点(mysite), 并依次实现以下功能:
  • (0) 将Karrigell 站配置成发布到 localhost:8081 端口来
  • (1) 在首页(index.pih)中输出Hello, Karrigell's world! 即在地址栏中输入localhost:8081/mysite出现Hello, Karrigell's world!
  • (2) 添加一个登录页(login.pih), 用户输入姓名, 密码后进入首页, 并在首页中输出Hello, 姓名's world!即当输入localhost:8081/mysite后, 首先进行登录, 我们输入姓名和密码后, 转入首页, 其显示Hello, 姓名's world! 具体可参见png/中截图所示.


返回 KDays实例故事


::-- ZoomQuiet [2005-12-10 11:49:22]

Name Password4deL ;) :( X-( B-)