status |
草稿 |
HuangYi 清风; 100% |
PCS300 CherryPy
啥是 CherryPy
CherryPy 是个非常简洁易用——面向对象的 web 框架。咦,面向对象不是用来形容 程序设计语言的,怎么来形容 web 框架了?很快你就会明白了。
使用 CherryPy 编写 web 程序的过程,就是编写一组对象再通过 CherryPy 发布出去的过程。 这样一组对象通过属性的引用构成了一个图,我们只需把一个根节点交给 CherryPy 。 这样 CherryPy 就会将用户请求的 URL 映射到这些对象,解析 URL 的时候就等于是在这个对象图 中漫游。最终 CherryPy 确定目标对象和相应方法,将URL的参数和POST参数根据名字映射到方法的参数, 然后调用其方法,并返回其结果给客户端。
使用 CherryPy 编写 web 程序的体验是非常舒服自然的,下面就跟我来尝试一把吧。
下载安装
从 http://www.cherrypy.org/wiki/CherryPyDownload (精巧地址: http://bit.ly/41FZYA )找到最新版本的下载地址并下载之,解压,然后和几乎所有python模块的安装一样,执行 python setup.py install ,则大功搞成,可以开始写程序了。
开始写程序
我们就从 hello world! 开始,编写 hello.py ,内容如下,保存成 utf-8 格式:
1 # -*- coding: utf-8 -*-
2 import cherrypy
3
4 class HelloWorld:
5 # 定义一个 index 的方法
6 def index(self):
7 return "Hello world!"
8 # 将 index 方法发布到 web
9 index.exposed = True
10
11 # 把根对象交给 cherrypy(不过这里总共就一个对象而已)
12 cherrypy.quickstart(HelloWorld())
然后打开命令行,直接执行 python hello.py 。现在打开浏览器访问 http://localhost:8080/index , 就可以看到上面 index 方法返回的那句话了,也可以直接访问 http://localhost:8080/ ,index 是默认调用的方法。
再来看个稍微复杂点的吧:
1 # -*- coding: utf-8 -*-
2 import cherrypy
3
4 class OnePage(object):
5 def index(self):
6 return "one page!"
7 index.exposed = True
8
9 class HelloWorld(object):
10 # 通过属性引用另一个对象,cherrypy解析URL的时候就会沿着属性引用的道路前进。
11 onepage = OnePage()
12
13 def index(self):
14 return "hello world"
15 index.exposed = True
16
17 # 定义了一个参数,cherrypy会将 URL 中的同名参数映射过来
18 def hello(self, name):
19 return "hello %s" % name
20 hello.exposed = True
21
22 cherrypy.quickstart(HelloWorld())
执行后,访问 http://localhost:8080/ 和 http://localhost:8080/onepage 可以分别看到 hello world 和 one page! 。访问 http://localhost:8080/hello?name=you 也可以看到返回了 hello you 。
上面处理的是 GET 参数,也就是 URL 中带的参数,CherryPy 将 POST 参数和 GET 参数是一视同仁,一律映射为方法的参数, POST 的处理其实是完全一样的。
另外实际的 web 应用中,当然不能把页面的html全部塞到 Python 代码里面来,实际上有很多专门的模板可以用,详见 PCSXX 大 web 框架介绍。 关于 CherryPy 的详细内容,读者可以参考CherryPy的官方文档.