在 CherryPy 中提供静态目录

Serving static directories in CherryPy

我正在尝试使用 CherryPy 提供静态文件,但我做不到。我查看了教程,但这样设置也无法正常工作。

所有这些都使用 Python 3.4

配置

config = {
        '/ws': {
            'tools.websocket.on': True,
            'tools.websocket.handler_cls': ChatWebSocketHandler,
            'tools.websocket.protocols': ['toto', 'mytest', 'hithere']
        },
        '/assets': {
              'tools.staticdir.on': True,
              'tools.staticdir.dir': constants.TEMPLATE_PATH
        },
    }

我正在这样启动 cherryPy

app_root = Root(args.host, args.port, args.ssl, ssl_port=args.ssl_port)
cherrypy.quickstart(app_root, '', config=config)

常量路径是

TEMPLATE_PATH = os.path.join(os.path.dirname(os.path.realpath(__file__)),"assets/")

我也尝试使用 assets//assets/ 等路径来代替上述常量。

问题是它无法识别其中任何一个,并且总是给出 404 错误。

我也很难设置它。我有一个相当复杂的设置,包含多个子域,这些子域已经通过 CherryPy 的几个早期版本发展,可能不再有效,而且我还没有验证这是否适用于您在此处拥有的更简单的快速入门配置。然而,实际对我有用的设置中的关键行是将下面的配置行放在您安装的 web 服务对象中。我将定义静态目录的配置字典放在任何资源之前的 class 定义中。在我看来,您已经在配置字典中定义了静态目录,而不是特定资源而不是对象。所以也许试试你的托管服务对象:

class WebService(object):
    _cp_config = {
                  'tools.staticdir.on': True,
                  'tools.staticdir.dir': '/path/to/serve/static/files/from'
                  }

    @cherrypy.expose
         def index(self):

   [ ...additional resource definitions, etc ...] 

然后:

    my_cp_app = 
    cherrypy.tree.mount(subDomain.WebService(),
                        '/subdomainFileLocation',
                        subdomainConfigDict)

    cherrypy.quickstart(config=domainConfig)

我知道您正在研究 Python 3。以上内容适用于 Python 2.7 + cherrypy-8.1.2。我希望这是有帮助的。