从目录中提供静态内容

本示例的目的是向您展示如何从文件系统提供静态内容。首先,我们需要导入一些对象

  • Site,一个 IProtocolFactory,它将监听服务器端口 (IListeningPort) 连接到 HTTPChannel 实现

    from twisted.web.server import Site
    
  • File,一个 IResource,它将 HTTP 协议实现连接到文件系统

    from twisted.web.static import File
    
  • reactor,它驱动整个过程,实际上接受 TCP 连接并将字节移入移出它们

    from twisted.internet import reactor
    
  • 以及 endpoints 模块,它为我们提供了工具,除其他外,用于创建监听套接字

    from twisted.internet import endpoints
    

接下来,我们创建一个指向要提供服务的目录的 File 资源实例

resource = File("/tmp")

然后我们使用该资源创建一个 Site 工厂实例

factory = Site(resource)

现在我们将该工厂连接到一个 TCP 端口

endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080)
endpoint.listen(factory)

最后,我们启动 reactor,以便它可以使程序工作

reactor.run()

就是这样。以下是完整的程序

from twisted.web.server import Site
from twisted.web.static import File
from twisted.internet import reactor, endpoints

resource = File('/tmp')
factory = Site(resource)
endpoint = endpoints.TCP4ServerEndpoint(reactor, 8080)
endpoint.listen(factory)
reactor.run()

额外示例!对于那些您不想编写新程序的时候,上面实现的功能是命令行 twistd 工具可以执行的操作之一。在这种情况下,命令

twistd -n web --path /tmp

将完成与上述服务器相同的事情。有关使用 twistd 的更多信息,请参阅 Twisted 核心文档中的 辅助程序