我来自PHP框架,我喜欢它们的一点是路由在某种程度上是为我处理的:我可以将我的所有控制器放在controllers目录中,当用户访问http://www.example.com/posts/delete/12时,它会自动调用Posts::delete(12)。我意识到我可以在CherryPy中使用路由,但是我对文档的局限性感到有点恼火--没有任何关于我应该如何格式化我的类名的内容(我应该称之为PostsController()吗?它甚至关心吗?),使用routes.mapper.connect()与routes.connect(),以及当它调用默认路由(/:controller/:action/:id)时会发生什么。
我真的很想使用Python,但我不想定义每一条路由。有没有人可以给我介绍一下Python web-framework newb教程,告诉我如何使用路由,或者解释一下如何构建一个CherryPy web应用程序,这样我就可以列出几条路径,比如
d = cherrypy.dispatch.RoutesDispatcher()
d.mapper.connect('main', '/:controller/:action', controller='root', action='index')
d.mapper.connect('main', '/:controller/:action/:id', controller='root', action='index')它会帮我处理吗?谢谢。
发布于 2011-04-21 17:58:56
简单的方法是使用cherrypy.tree.mount挂载控制器对象。控制器的结构将为您提供基本的路由。
例如:
import cherrypy
class AppRoot:
def index(self):
return "App root's index"
index.exposed = True
controller1 = Controller1Class()
# controller2 = Controller2Class(), etc.
class Controller1Class:
def index(self):
return "Controller 1's index"
index.exposed = True
def action1(self, id):
return "You passed %s to controller1's action1" % id
action1.exposed = True
# def action2(self, id): etc...
# ... the rest of the config stuff ...
cherrypy.tree.mount(AppRoot(), '/')
# ... the rest of the startup stuff....调用以下URI将调用以下方法:
AppRoot::index()Controller1Class::index()Controller1Class::action1()Controller1Class::action1("40")->
另请参阅:
https://stackoverflow.com/questions/5630639
复制相似问题