私はCherryPyツールボックスに新しいツールを宣言しようとしていますが、これはdocs:Docs CherryPy Toolsの例に従っています。CherryPyツールの宣言が失敗しました
私が書かれている例によると:
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を使用しています。
私はちょうどフラスコを個人的に使用していました...申し訳ありませんが、私は答えがわかりませんが、私を知っています –