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的官方文档.

练习