刚才看到这个页面:http://tools.cherrypy.org/wiki/InteractiveInterpreter,发现 cherrypy 还可以这样做,真是有点意思,正如作者所说: We think it showcases the pythonic nature of CherryPy. 不过那个视频使用的是cherrypy以前的版本,cherrypy3稍有不同,以下是我使用 cherrypy3 在 ipython 上实验的结果:
Python 2.4.4 Stackless 3.1b3 060516 (#71, Jan 27 2007, 21:48:58) [MSC v.1310 32
bit (Intel)]
Type "copyright", "credits" or "license" for more information.
IPython 0.7.3 -- An enhanced Interactive Python.
? -> Introduction to IPython's features.
%magic -> Information about IPython's 'magic' % functions.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]: import cherrypy
In [2]: cherrypy.config.update({
...: 'autoreload.on':False,
...: 'server.log_to_screen':False
...: })
In [3]: class Hello(object):
...: @cherrypy.expose
...: def index(self):
...: return 'hello world!'
...: @cherrypy.expose
...: def test(self):
...: yield 'test1'
...: yield 'test2'
...:
In [4]: hello = Hello()
In [5]: cherrypy.tree.mount(hello, '/')
Out[5]: <cherrypy._cptree.Application object at 0x00E2C0F0>
In [6]: cherrypy.engine.start(blocking=False)
CherryPy Checker:
The Application mounted at '' has an empty config.
In [7]: cherrypy.server.quickstart()
[09/Mar/2007:21:01:40] HTTP Serving HTTP on http://0.0.0.0:8080/
# 注释:此时可以访问 http://localhost:8080/ 和 http://localhost:8080/test 了。
In [8]: def test2(self):
...: return 'test2'
...:
In [9]: Hello.test2 = cherrypy.expose(test2)
# 注释:此时可以访问 http://localhost:8080/test2 了!
真是方便那!
4 评论:
會用 cherrypy 就會用 TurboGears 了, 語法一樣.
Gasolin 所言不虚, 这里斗胆再模仿一句:
会用 CherryPy 差不多就可以把 TurboGears 复制出来了 :D
接着再诟病一下 cherrypy.tree.mount, 因为他和 Apache Proxy 撞车了 ……
"""
接着再诟病一下 cherrypy.tree.mount, 因为他和 Apache Proxy 撞车了
"""
啥意思?
Apache 风格的 mount:
<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/指东/(.*) http://localhost:8080/$1 [P,L]
RewriteRule ^/打西/(.*) http://localhost:8090/$1 [P,L]
</VirtualHost>
这和 CherryPy 风格的 mount 思路不尽相同。这里每个应用都是由一个小的应用服务器组成 (比如由许多 cherrypy 组成)。
他的特点是每个应用服务器都只关心一个很小的功能, 小应用服务器之间同样通过 HTTP 通信, 同时这些小应用可以分布在不同的服务器上。这许多小的应用服务器组成了一个大的网站体系。
相反, CherryPy 的 class tree 事实上会鼓励用户将一个应用完全架构在一个 cherrypy 应用服务器上, 同时靠自己 mount 一切, 而不需要类似于 Apache 的帮助。
在我的哲学里, 能尽可能地和别人协作是一个重要的粒度, 所以我用 Apache (lighttpd) 将应用 mount 出去, 并且负责静态文件的输出。而且我倾向于多应用服务器的多进程方案, 我认为在一个应用服务器中建立起过于庞大的站点是不明智的。所以对于 CherryPy tree mount, 我是颇有微辞的。
发表评论