CherryPy:为一个处理程序关闭工具

CherryPy: Turn off tool for one handler

我有一个 class 有几条路线,我希望他们都使用 json 工具 除了一条 。如何从工具中排除特定路线(下例中的 foo)?

import cherrypy

class HelloWorld(object):
    _cp_config = {
        'tools.json_out.on': True,
        'tools.json_in.on': True,
        '/foo': {
           'tools.json_out.on': True,
           'tools.json_in.on': True
        }
    }
    @cherrypy.expose()
    def index(self):
        return "Hello World!"
    @cherrypy.expose()
    def foo(self):
        return "Hello World!"

cherrypy.quickstart(HelloWorld())

您可以使用 cherrypy.config 装饰器来做到这一点:

import cherrypy

class HelloWorld(object):
    _cp_config = {
        'tools.json_out.on': True,
        'tools.json_in.on': True
    }

    @cherrypy.expose
    def index(self):
        return "Hello World!"

    @cherrypy.expose
    @cherrypy.config(**{'tools.json_in.on': False, 'tools.json_out.on': False})
    def foo(self):
        return "Hello World!"

cherrypy.quickstart(HelloWorld())

@cyraxjoe 的回答的另一种但等效的方法是

import cherrypy

class HelloWorld(object):
    _cp_config = {
        'tools.json_out.on': True,
        'tools.json_in.on': True
    }

    @cherrypy.expose
    def index(self):
        return "Hello World!"

    @cherrypy.expose
    @cherrypy.config(**{'tools.json_in.on': False, 'tools.json_out.on': False})
    def foo(self):
        return "Hello World!"
    foo._cp_config = {
        'tools.json_out.on': False,
        'tools.json_in.on': False,
    }

cherrypy.quickstart(HelloWorld())