【问题标题】:How to use cherrypy as a web server for static files?如何将cherrypy用作静态文件的Web服务器?
【发布时间】:2010-10-20 01:35:06
【问题描述】:

有没有什么简单的方法可以将 CherryPy 用作 Web 服务器,在某个文件夹中显示 .html 文件?所有 CherryPy 介绍性文档都声明内容是动态生成的:

import cherrypy
class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True
cherrypy.quickstart(HelloWorld())

使用index.html 代替 HelloWorld.index() 方法有什么简单的方法吗?

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

    以下是有关使用 CherryPy 提供静态内容的一些信息:http://docs.cherrypy.org/stable/progguide/files/static.html

    顺便说一句,这是通过 HTTP 与 python 共享当前目录的简单方法:

    # Python 3 $ python -m http.server [端口] # Python 2 $ python -m SimpleHTTPServer [端口]

    【讨论】:

    • 我知道 SimpleHTTPServer,但是用cherrypy做同样的事情是非常有趣的。不幸的是,教程没有说明将任何 .html 文件作为静态内容提供 - 只有预定义的 .css 文件 :(
    • 你提供什么样的文件应该无关紧要,它也应该适用于 html 文件。见cherrypy.org/wiki/…。另一个链接:nabble.com/How-do-I-serve-up-static-file-pages--td20897705.html
    • 如果您想要做的与 codeape 最初发布的 cmdline 类似,wiki 链接没有任何帮助。也就是说,运行一个简单的服务器,从定义的目录(或 cwd)提供静态内容,而无需编写任何代码,无论多么微不足道。
    【解决方案2】:
    # encode: utf-8
    
    import cherrypy
    WEB_ROOT = "c:\\webserver\\root\\"
    
    class CServer( object ) :
        @cherrypy.expose
        def do_contact(self, **params):
            pass
    
    cherrypy.server.socket_port = 80
    # INADDR_ANY: listen on all interfaces
    cherrypy.server.socket_host = '0.0.0.0'
    conf = { '/':
      { 'tools.staticdir.on' : True,
        'tools.staticdir.dir' : WEB_ROOT,
        'tools.staticdir.index' : 'index.html' } }
    cherrypy.quickstart( CServer(), config = conf )
    

    【讨论】:

    • 如果您有一个名为 do_contact 的文件怎么办?该文件将无法下载?
    • 这来自示例,似乎我被误导了,并采取了“do_contract”作为某种内部过滤方法来覆盖:)
    【解决方案3】:

    这个简单的代码将提供当前目录中的文件。

    import os
    import cherrypy
    
    PATH = os.path.abspath(os.path.dirname(__file__))
    class Root(object): pass
    
    cherrypy.tree.mount(Root(), '/', config={
            '/': {
                    'tools.staticdir.on': True,
                    'tools.staticdir.dir': PATH,
                    'tools.staticdir.index': 'index.html',
                },
        })
    
    cherrypy.quickstart()
    

    【讨论】:

    • 使用 CherryPy 3.2,我必须将 cherrypy.quickstart() 更改为 cherrypy.engine.start()cherrypy.engine.block() 才能提供内容。
    • 对于 CherryPy 3.6,您还必须使用 cherrypy.engine.start()cherrypy.engine.block()
    【解决方案4】:

    我发布这个新答案是因为已接受答案的解决方案已过时。 这个简单的代码将提供当前目录中的文件。

    import os
    import cherrypy
    
    PATH = os.path.abspath(os.path.dirname(__file__))
    class Root(object): pass
    
    cherrypy.tree.mount(Root(), '/', config={
            '/': {
                    'tools.staticdir.on': True,
                    'tools.staticdir.dir': PATH,
                    'tools.staticdir.index': 'index.html',
                },
        })
    
    cherrypy.engine.start()
    cherrypy.engine.block()
    

    当然,这只是对已发布内容的总结。

    【讨论】:

      猜你喜欢
      • 2012-07-02
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 2017-10-10
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多