CherryPy 工具声明失败
Declaration of CherryPy Tool fails
我正在尝试按照文档中的示例向 CherryPy 工具箱声明一个新工具:Docs CherryPy Tools。
根据我写的例子:
import cherrypy
def myTool():
print ("myTool")
class Root(object):
@cherrypy.expose
@cherrypy.tools.mytool()
def index(self):
return "Hello World!"
if __name__ == '__main__':
cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
cherrypy.quickstart(Root(), '/')
这会导致以下错误:
Traceback (most recent call last):
File "server.py", line 6, in <module>
class Root(object):
File "server.py", line 8, in Root
@cherrypy.tools.mytool()
AttributeError: 'Toolbox' object has no attribute 'mytool'
但是,如果我将符号更改为以下,它会按预期工作。
import cherrypy
def myTool():
print ("myTool")
class Root(object):
@cherrypy.expose
def index(self):
return "Hello World!"
index._cp_config = {'tools.mytool.on': True}
if __name__ == '__main__':
cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
cherrypy.quickstart(Root(), '/')
文档说这两种方法的效果相同,但我的情况不同。如果有人知道我做错了什么,我将不胜感激。
该工具不应全局定义,因此使用 @cherrypy.tools.mytool() 表示法。
我正在使用 python 3.6.
问题是对python求值顺序的误解(自上而下),在定义class时工具还没有定义。
您可以在顶部的另一个文件导入中定义该工具(在 class 定义之前),它应该可以工作。
第二种形式有效,因为配置是使用配置中的字符串间接完成的,而不是真正的工具对象。
我正在尝试按照文档中的示例向 CherryPy 工具箱声明一个新工具:Docs CherryPy Tools。
根据我写的例子:
import cherrypy
def myTool():
print ("myTool")
class Root(object):
@cherrypy.expose
@cherrypy.tools.mytool()
def index(self):
return "Hello World!"
if __name__ == '__main__':
cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
cherrypy.quickstart(Root(), '/')
这会导致以下错误:
Traceback (most recent call last):
File "server.py", line 6, in <module>
class Root(object):
File "server.py", line 8, in Root
@cherrypy.tools.mytool()
AttributeError: 'Toolbox' object has no attribute 'mytool'
但是,如果我将符号更改为以下,它会按预期工作。
import cherrypy
def myTool():
print ("myTool")
class Root(object):
@cherrypy.expose
def index(self):
return "Hello World!"
index._cp_config = {'tools.mytool.on': True}
if __name__ == '__main__':
cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
cherrypy.quickstart(Root(), '/')
文档说这两种方法的效果相同,但我的情况不同。如果有人知道我做错了什么,我将不胜感激。
该工具不应全局定义,因此使用 @cherrypy.tools.mytool() 表示法。
我正在使用 python 3.6.
问题是对python求值顺序的误解(自上而下),在定义class时工具还没有定义。
您可以在顶部的另一个文件导入中定义该工具(在 class 定义之前),它应该可以工作。
第二种形式有效,因为配置是使用配置中的字符串间接完成的,而不是真正的工具对象。