正如fumanchu 所提到的,您可以通过多次调用cherrypy.tree.mount
. 下面是我正在开发的一个网站的简化版本,它包含一个前端 Web 应用程序和一个 Restful API:
import cherrypy
import web
class WebService(object):
def __init__(self):
app_config = {
'/static': {
# enable serving up static resource files
'tools.staticdir.root': '/static',
'tools.staticdir.on': True,
'tools.staticdir.dir': "static",
},
}
api_config = {
'/': {
# the api uses restful method dispatching
'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
# all api calls require that the client passes HTTP basic authentication
'tools.authorize.on': True,
}
}
cherrypy.tree.mount(web.Application(), '/', config=app_config)
cherrypy.tree.mount(web.API(), '/api', config=api_config)
# a blocking call that starts the web application listening for requests
def start(self, port=8080):
cherrypy.config.update({'server.socket_host': '0.0.0.0', })
cherrypy.config.update({'server.socket_port': port, })
cherrypy.engine.start()
cherrypy.engine.block()
# stops the web application
def stop(self):
cherrypy.engine.stop()
创建 的实例会WebService
初始化两个不同的 Web 应用程序。第一个是我的前端应用程序,它位于web.Application
并将在/
. 第二个是我的 RESTful API,它存在于web.API
并将在/api
.
这两个视图也有不同的配置。例如,我指定 api 使用方法分派,并且对它的访问由 HTTP Basic 身份验证控制。
创建 的实例后WebService
,您可以根据需要对其调用 start 或 stop ,它会负责所有的清理工作。
很酷的东西。