Hello, Uliweb

本教程将带你领略 Uliweb 的风采,这是一个非常简单的例子,你可以按照我的步骤来操作。我们 将生成一个空的页面,它将显示"Hello, Uliweb"信息。

准备

安装请看 安装Uliweb

创建新的项目

在安装完毕后,Uliweb 提供一个命令行工具 uliweb, 它可以执行一些命令,它会安装在 Python/Scripts 目录下,因此要想运行它,要保证 Python/Scripts 在PATH环境变量上,这样我们就可以在命令行 下使用它了。

进入你的工作目录,然后执行:

uliweb makeproject project

执行成功后,在 project 目录下会是这样的:

├── apps
│   ├── __init__.py
│   ├── local_settings.ini
│   └── settings.ini
├── doc
│   └── readme.txt
├── .gitignore
├── README.md
├── requirements.txt
├── setup.py
└── wsgi_handler.py

创建Hello应用

然后让我们创建一个Hello的应用:

cd project
uliweb makeapp Hello

在执行成功后,你会在apps/Hello下看到:

├── __init__.py
├── README.md
├── static
│   └── readme.txt
├── templates
│   └── readme.txt
└── views.py

输出"Hello, Uliweb"

打开 Hello/views.py,你会看到:

#coding=utf-8
from uliweb import expose, functions

@expose('/')
def index():
    return '<h1>Hello, Uliweb</h1>'

以上几行代码是在执行 makeapp 之后自动创建的。甚至我们都不用写一行代码,已经有一个 Hello, Uliweb 的View函数了。

@expose('/') 是用来处理 URL Mapping的,它表示将/映射到它下面的view方法上。这样,当用户 输入 http://localhost:8000/ 时将访问 index() 方法。如果一个函数前没有使用expose修饰, 它将不会与任何URL对应,因此可以认为是一个局部函数。

这里index()没有任何参数。如果你在expose中定义了参数,它将与之对应。但因为这个例子没有定 义参数,因此index不需要定义参数。

然后我们直接返回了一行HTML代码,它将直接输出到浏览器中。

启动

好了,让我们启动看一下结果吧。

在命令行下执行:

uliweb runserver

这样就启动了一个开发服务器。然后可以打开浏览器输入: http://localhost:8000 看到结果。

是不是很简单,但是这样不够,让我们变化一下,这次让我们加入模板。

加入模板

如果你的 view 方法返回一个dict对象,则 Uliweb 会自动为你应用一个模板,模板名字与你的view 方法一样,只不过后面有一个 .html。如 index() 对应的模板就是 index.html。那么这个模板文件 放在哪里呢?在前面你可以看到,当你创建完一个 app 之后,会自动创建一个 templates 目录,因 此你的模板就放在这个 templates 目录下。好,为了不影响index()方法,让我们创建一个新的方法

@expose('/template')
def template():
    return {}

然后在apps/Hello/templates下创建 template.html, 内容为:

<h1>Hello, Uliweb</h1>

在浏览器输入 http://localhost:8000/template 你将看到相同的结果。

使用模板变量

上面的例子是将信息全部放在了模板中,但是这样通用性不好,现在再让我们修改一下,使用模板变量。 让我们再创建一个新的view方法,写入下面的代码:

@expose('/template1')
def template1():
    return {'content':'Uliweb'}

然后在apps/Hello/templates下创建 template1.html,内容为:

<h1>Hello, {{=content}}</h1>

这次我在template1()中返回了一个字典,则变量content将用来表示内容。也许你对使用 {} 这样 的形式感觉不够方便,还有以下的变形的方式,如:

return dict(content='Uliweb')

或:

content = 'Uliweb'
return locals()

前一种方法利用dict函数来构造一个dict对象。而后一种方法则直接使用了locals()内置函数来返 回一个dict对象,这样你只要定义了相应的变量就可以了。这样locals()返回的变量有可能比模板 所需要的变量要多,但是不会影响你的使用,只要在模板中认为不存在就可以了。

使用 Uliweb 的开发服务器具备自动重启的功能,因此一般进行程序的修改不需要重启服务器, 只要刷新浏览器就行。但有时程序出错或一些模板具备缓冲能力还是需要刷新。只要在命令行下 输入 Ctrl+C 就可以结束开发服务器,然后重启就行。

结束

本教程只演示了最基本的 view 和模板的处理,还有其它许多的内容没有涉及,如:

  • App的组织
  • 数据库的使用
  • 配置文件的使用
  • 等等