Introduction
Credit: Andy McKayThe Web has been a key technology
for many years now, and it has become unusual to develop an
application that doesn't involve some aspects of the
Web. From showing a help file in a browser to using web services, the
Web has become an integral part of most applications.
I
came to Python through a rather tortuous path of ASP (Active Server
Pages), then Perl, some Zope, and then Python. Looking back, it seems
strange that I didn't find Python earlier, but the
dominance of Perl and ASP (and later PHP) in this area makes it
difficult for new developers to see the advantages of Python shining
through all the other languages.Unsurprisingly, Python is an excellent language for web development,
and, as a batteries included language, Python
comes with most of the modules you need. The relatively recent
inclusion of xmlrpclib in the Python Standard
Library is a reassuring indication that batteries continue to be
added as the march of technology requires, making the standard
libraries even more useful. One of the modules I often use is
urllib, which demonstrates the power of a simple,
well-designed modulesaving a file from the Web in two lines
(using urlretrieve) is easy. The
cgi module is another example of a module that has
enough functionality to work with, but not too much to make your
scripts slow and bloated.Compared to other languages, Python seems to have an unusually large
number of application servers and templating languages. While
it's easy to develop anything for the Web in Python
"from scratch", it would be
peculiar and unwise to do so without first looking at the application
servers available. Rather than continually recreating dynamic pages
and scripts, the community has taken on the task of building these
application servers to allow other users to create the content in
easy-to-use templating systems.
Zope is the most
well-known product in this space and provides an object-oriented
interface to web publishing. With features too numerous to mention,
Zope allows a robust and powerful object-publishing environment. The
new, revolutionary major release, Zope 3, makes Zope more Pythonic
and powerful than ever. Quixote and WebWare are two other application
servers with similar, highly modular designs. Any of these can be a
real help to the overworked web developer who needs to reuse
components and to give other users the ability to create web sites.
The Twisted network-programming framework, increasingly acknowledged
as the best-of-breed Python framework for asynchronous network
programming, is also starting to expand into the web application
server field, with its newer
"Nevow" offshoot, which
you'll also find used in some of the recipes in this
chapter.
For all that, an application server is just
too much at times, and a simple CGI script is really all you need.
Indeed, the very first recipe, Recipe 14.1, demonstrates all the
ingredients you need to make sure that your web server and Python CGI
scripting setup are working correctly. Writing a CGI script
doesn't get much simpler than this, although, as the
recipe's discussion points out, you could use the
cgi.test function to make it even shorter.Another common web-related task is the parsing of HTML, either on
your own site or on other web sites. Parsing HTML tags correctly is
not as simple as many developers first think, as they optimistically
assume a few regular expressions or string searches will see them
through. However, we have decided to deal with such issues in other
chapters, such as Chapter 1, rather than in this
one. After all, while HTML was born with and for the Web, these days
HTML is also often used in other contexts, such as for distributing
documentation. In any case, most web developers create more than just
web pages, so, even if you, the reader, primarily identify as a web
developer, and maybe turned to this chapter as your first one in the
book, you definitely should peruse the rest of the book, too: many
relevant, useful recipes in other chapters describe parsing XML,
reading network resources, performing systems administration, dealing
with images, and many great ideas about developing in Python, testing
your programs, and debugging them!