50
11.1 Introduction
Credit: Andy McKay
The 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, 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 in this area makes it hard 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 will need. The inclusion of
xmlrpclib
in Python 2.2 has made the standard libraries even more useful. One of the
modules I often use is
urllib
, which demonstrates the power of a simple, well-designed
module—saving a file from the Web in two lines (using
urlretrieve
) is easy. The
cgi
module is another example of a module that has enough to work with, but not too much to make
the script too 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, it
would be peculiar 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 the space and provides an object-oriented interface to web
publishing. With features too numerous to mention, it allows a robust and powerful object-
publishing environment. Quixote and WebWare are two other application servers with similar,
highly modular designs. These can be a real help to the overworked web developer who needs to
reuse components and give other users the ability to create web sites.
There are times when an application server is just too much and a simple CGI script is all you
need. The first recipe in this chapter, Recipe 11.2
, is all you need to make sure 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 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. While such approaches
will work for parsing data from other sites, they don't provide enough security to ensure that
incoming HTML contains no malicious tags. Recipe 11.7
is a good example of using
sgmllib
to parse incoming data and strip any offending JavaScript. Most web developers create more than
just dynamic web pages, and there are many relevant, useful recipes in other chapters that describe
parsing XML, reading network resources and systems administration, for example.