[mod_python] How to handle multiple .py files using Apache 1.3.x and mod_python 2.7

Jorey Bump list+mod_python at joreybump.com
Thu Apr 15 13:50:16 EST 2004


Eustaquio Rangel de Oliveira Jr. wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Jorey Bump wrote:
> 
> |Assuming you're using publisher and your DocumentRoot is /var/www/html,
> |you can do this:
> 
> |  <Directory /var/www/html>
> |    AddHandler python-program .py
> |    PythonHandler mod_python.publisher
> |    PythonDebug On
> |  </Directory>
> 
> |That would allow you to use .py files almost anywhere. Specify a
> |subdirectory if you want to limit it. There are no conflicts with
> |mod_php.
> 
> Hey, thanks for your answer. I did this, and when I try to run test.py:
> 
> from mod_python import apache
> 
> def handler(req):
>     req.content_type = "text/plain"
>     req.send_http_header()
>     req.write("Hello, world!<br>")
>     r = range(0,10)
>     for n in r:
>         req.write(str(n)+"<br>")
>     return apache.OK
> 
> I got a:
> 
> Not Found
> The requested URL /test.py was not found on this server.
> Apache/1.3.29 Server at taq.localhost Port 80

It's much simpler than that. Try this in test.py:

def hello(req):
     x = "Hello, world!"
     return x

Then go to:

  http://localhost/test.py/hello

You'll see the text, and the server will send it as

  Content-Type: text/plain; charset=ISO-8859-1

Now add this function:

def hellohtml(req):
     x = """<html>
<head>
<title>Hello, World!</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
"""
     return x

Go to:

  http://localhost/test.py/hellohtml

It's now HTML, with the appropriate header:

  Content-Type: text/html; charset=ISO-8859-1

Finally, add a function that takes an argument from the URL:

def hellohtmlarg(req, arg):
     x = """<html>
<head>
<title>%s</title>
</head>
<body>
<h1>%s</h1>
</body>
</html>
""" % (arg, arg)
     return x

Go to:

  http://localhost/test.py/hellohtmlarg?arg=Hello,%20World!

You can see that you generally don't need to worry about sending headers 
or importing the apache module with mod_python.publisher. Just construct 
your page as a string and return it. Publisher does the rest for you.

If you need to set special headers, you can do it like this:

  req.headers_out['Pragma'] = 'no-cache'
  req.headers_out['Cache-Control'] = 'no-cache'
  req.headers_out['Expires'] = '-1'

But I prefer to do it in httpd.conf or .htaccess, myself:

  Header set Pragma "no-cache"
  Header set Cache-Control "no-cache"
  Header set Expires "-1"

It's a matter of taste.



More information about the Mod_python mailing list