# Overview of Twisted Web

## Introduction

Twisted Web is a web application server written in pure Python, with APIs at multiple levels of abstraction to facilitate different kinds of web programming. The most useful for web application designers is Woven, a high-level MVC-and-template oriented system. There is also the Resource system, which Woven is built on.

## Twisted Web's Structure

When the Web Server receives a request from a Client, it creates a Request object and passes it on to the Resource system. The Resource system dispatches to the appropriate Resource object based on what path was requested by the client. The Resource is asked to render itself, and the result is returned to the client.

## Resources

Resources are the lowest-level abstraction for applications in the Twisted web server. Each Resource is a 1:1 mapping with a path that is requested: you can think of a Resource as a single page to be rendered. The interface for making Resources is very simple; they must have a method named `render` which takes a single argument, which is the Request object (an instance of `twisted.web.server.Request`). This render method must return a string, which will be returned to the web browser making the request. Alternatively, they can return a special constant, `twisted.web.server.NOT_DONE_YET`, which tells the web server not to close the connection; you must then use `request.write(data)` to render the page, and call `request.finish()` whenever you're done.

## Woven

Woven is an added layer of abstraction over Resources -- it's much nicer for most sorts of web applications. For more information on Woven, see Woven Overview.