刚才看到这个页面: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, 我是颇有微辞的。
发表评论