在CherryPy中提供静态目录

时间:2017-07-17 17:12:23

标签: python 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
        },
    }

我正在启动像这样的

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

Constant Path

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

我尝试使用assets//assets/之类的路径,而不是上面的常量。

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

1 个答案:

答案 0 :(得分:1)

我也很难设置它。我有一个相当复杂的设置,包含多个子域,这些子域已经在几个早期版本的CherryPy中发展,这些版本可能已经不再有效了,而且我没有证实这可以在你在这里更简单的快速入门配置中使用。但是,实际适用于我的设置中的关键行是将配置行放在您挂载的webservice对象中。我把配置dict在任何资源之前定义了类定义中的静态目录。在我看来,你已经在配置字典中定义了静态目录,而不是特定资源而不是对象。所以也许尝试托管服务对象:

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。我希望这是有帮助的。