1. 题目要求

写一个Hello,world程序,带有环境安装说明

2. 框架说明

pynixweb (http://code.google.com/p/pynixweb)

3. 安装

下载pynixweb 解压开

├─doc
└─src
    ├─apps(存放所有的程序)
    │  ├─example(hello world的例子)
    │  └─mysqldemo(mysql的例子,需要导入src/test.sql目录)
    ├─libs(第三方的库)
    └─templates
        ├─commons(公共模板文件)
        ├─example(helloword的模板)
        ├─mysqldemo(mysql例子的模板)
        └─static(静态文件)
            └─blueprint
                ├─plugins
                │  ├─buttons
                │  │  └─icons
                │  ├─fancy-type
                │  ├─link-icons
                │  │  └─icons
                │  └─rtl
                └─src

src目录就是pynixweb的目录,同时也是项目目录,pynixweb定义了项目目录结构,提供一个规范的目录结构以方便文件的管理。 运行src/run.py可以启动pynixweb内置的server。

4. 环境要求

*python 2.5 python2.6 *如果需要运行mysql则需要对应的驱动,mysqldb

5. 安装

解压pynixweb,将src复制到工程目录下改名为自己的工程名比如hellworld(如果不需要apps下的例子可以删除掉)

6. 第一个helloworld

6.1. 1.新建apps目录结构

在apps目录下新建helloworld包(python包是指包含init.py的目录)和helloworld.controller包

6.2. 2.写挂载点

所有的apps都是通过挂载点挂载到系统上的。在helloworld/init.py中添加

def getMapper():
    import example.controllers
    return {
            "/":controllers.IndexController()
            }

将controller.IndexController挂在到系统的"/"路径下

6.3. 3.写controller

在helloworld/controller/init.py添加

#ecoding: utf-8 -*-

from pynixweb.template.template import render_template
from pynixweb.controllers.controller import PynixWebController

class IndexController(PynixWebController):
    def index(self):
        name = "fireflyc"
        return render_template("hello/index.html", locals())

   #由于controller被挂到"/"下,所以可以访问 /sayhello来浏览
   def sayhello(self):
        return "hello"

6.4. 4.定义模板文件

pynixweb的模板集中放在templates/目录下,我们在目录下新建hello目录来作为我们例子的模板文件夹。新建index.html来作为模板

<metal:macro use-macro="commons/index/macros/main">
    <metal:macro fill-slot="body">
        <metal:macro use-macro="commons/message/macros/messages" />
        <div class="container">
            <form action="login" method="post">
                你的姓名<input name="name" value="" type="text" />
                <input name="submit" type="submit" value="提交"/>
            </form>
        </div>
    </metal:macro>
</metal:macro>

模板使用zope page template。当前的模板风格使用了zpt特有的macro来达到重用板式的目的。当然你也可以通过"include"的方式来引用别的模板文件。具体的可以参考ZPT参考文档。

6.5. 5.运行结果

执行run.py 访问

http://localhost:8080/
http://localhost:8080/sayhello

7. 总结

由于我非常反对代码生成,所以暂时不会考虑引入代码生成机制。 目前来说pynixweb刚刚起步,比Uliweb年轻,所以还有很多机制不是那么的完善。欢迎大家广泛的提出自己的"最佳实践"。 pynixweb的路线会坚持"细小之处见体贴"的宗旨努力去融合"最佳实践"让代码既灵活又小巧,宁可框架的作者写十行不让使用者写两行。(一行不写是不行的,我坚决反对代码生成)

8. 项目地址

http://code.google.com/p/pynixweb/


PyWEB技术分类