我在CherryPy中使用方法调度程序。在服务器的server / start.py部分,我需要实例化API类。
为了使它更加模块化,而不是将所有内容都放在start.py文件中,我就这样编码了。
所以,我有一个包含所有实例化api类的dict。
services = {}
user = UserResource() #api class
foo = FooResource() #api class
services = {"user":user, "foo":foo}
class Server(object):
"""Initialise the Cherrypy app"""
#for service in services:
user = services.values()[0]
cherrypy.quickstart(Server())
有效。但是,如果我做services.keys()[0] = services.values()[0]
它根本不起作用。没有路线。
我该怎么做?我不必将它分配给服务器类中的特定类,而是使用键来添加路由。
答案 0 :(得分:1)
services.keys()
只返回一个列表。将该列表的第一个元素设置为任何内容将不起作用。
我希望你能做services[services.keys()[0]] = services.values()[0]
,虽然我无法想象你想用这个代码做什么。
修改强>
好的,我想我明白你想做什么。似乎CherryPy依赖于类级属性来定义它将服务的路由。 docs显示了如何动态执行此操作。在你的情况下,你可以做这样的事情:
class Server(object):
pass
for k, v in services:
setattr(Server, k, v)
请注意,setattr必须在类定义本身之外完成,因为类主体内不存在服务器名称。
答案 1 :(得分:0)
如果您希望获得更多路由灵活性,请使用RoutesDispatcher。