If you don't like to do your own plumbing, you send for a plumber. If you don't like building web systems from the ground up, you use frameworks. Python's natural affinity for the web has been exploited many times to build web-system frameworks, with varying degrees of success, and the results are often freely available through the generosity of their authors. Some frameworks assume that you are working with a classic web server. Others give you more freedom by concentrating mostly on HTML generation, but even these tools often include the capability to intermingle Python and output text for more flexibility in content generation.
In this chapter, you will review the classic web server architecture, and the roles that Python can play under such a regime. Next you will go on to look at some of the possible pure Python architectures for web systems. Finally, you will meet Xitami, a lightweight web server with the capability to interact with long-running processes. Although this may not cover the whole range of server architectures available, it is a sufficiently diverse range to give you a good idea of the possibilities.
Along the way, you will learn some things that will help in many different architectural contexts. The task of interacting with web clients has many common features no matter what the eventual architecture. You also will learn an easy way to integrate databases with Python, allowing you to address all database columns as attributes of the rows that contain them. The chapter concludes with a look at HTML generation and a glance at intercomponent communications. At that stage, you will be ready to tackle the kind of problem that webs are being built to solve every day.
It is difficult to keep track of Python web toolkits. Cameron Laird maintains useful information on web uses of Python at http://starbase.neosoft.com/~claird/comp.lang.python/web_python.html/, and Paul Boddie makes a good survey of the field at http://www.paul.boddie.net/Python/web_modules.html. Both of these resources appear to be actively maintained at the time of writing.
Most publicly available web servers come with copious documentation. The Python code you will find comes with documentation of varying quality, ranging from "thin" to "excellent," but sadly the former tends to outweigh the latter. One of the current shortcomings of the open-source world is that more people want to write code than document it. This is a real pity, when you consider that good documentation usually increases the likelihood of software being reused by others.
The software world has always undervalued documentation (at least from the pragmatic point of view of not producing enough). The Python language is a model of its type, and although the documentation may not be perfect, Fred Drake does a very good job of ensuring that it is both useful and consistent, as anyone can see at http://www.python.org/doc/current/. Ka-Ping Yee presents another model site at http://web.pydoc.org/ and simultaneously manages to demonstrate the value of his pydoc module. What follows is an eclectic summary of available web frameworks of various types, all of which accommodate Python somehow. The exclusion of a particular framework from this chapter does not imply a value judgment about that framework. There really are far too many Python web frameworks for a single chapter, so I have tried to choose a representative sample that gives a flavor of the current state of the art.