Serving Static Content From a Directory

The goal of this example is to show you how to serve static content from a filesystem. First, we need to import some objects:

  • Site, an IProtocolFactory which glues a listening server port (IListeningPort) to the HTTPChannel implementation:

    from twisted.web.server import Site
    
  • File, an IResource which glues the HTTP protocol implementation to the filesystem:

    from twisted.web.static import File
    
  • The reactor, which drives the whole process, actually accepting TCP connections and moving bytes into and out of them:

    from twisted.internet import reactor
    
  • And the endpoints module, which gives us tools for, amongst other things, creating listening sockets:

    from twisted.internet import endpoints
    

Next, we create an instance of the File resource pointed at the directory to serve:

resource = File("/tmp")

Then we create an instance of the Site factory with that resource:

factory = Site(resource)

Now we glue that factory to a TCP port:

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

Finally, we start the reactor so it can make the program work:

reactor.run()

And that’s it. Here’s the complete program:

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, 8888)
endpoint.listen(factory)
reactor.run()

Bonus example! For those times when you don’t actually want to write a new program, the above implemented functionality is one of the things the command line twistd tool can do. In this case, the command

twistd -n web --path /tmp

will accomplish the same thing as the above server. See helper programs in the Twisted Core documentation for more information on using twistd.

Previous topic

Twisted Web In 60 Seconds

Next topic

Generating a Page Dynamically

This Page