6.1.2.1 Traversal
The Publisher handler locates and imports the module specified in the
URI. The module location is determined from the req.filename
attribute. Before importing, the file extension, if any, is
discarded.
If req.filename is empty, the module name defaults to
"index".
Once module is imported, the remaining part of the URI up to the
beginning of any query data (a.k.a. PATH_INFO) is used to find an
object within the module. The Publisher handler traverses the
path, one element at a time from left to right, mapping the elements
to Python object within the module.
If no path_info was given in the URL, the Publisher handler will use
the default value of "index". If the last element is an object inside
a module, and the one immediately preceding it is a directory
(i.e. no module name is given), then the module name will also default
to "index".
The traversal will stop and HTTP_NOT_FOUND will be returned to
the client if:
- Any of the traversed object's names begin with an underscore
("_"). Use underscores to protect objects that should not be
accessible from the web.
- A module is encountered. Published objects cannot be modules for
security reasons.
If an object in the path could not be found, HTTP_NOT_FOUND
is returned to the client.
For example, given the following configuration:
DocumentRoot /some/dir
<Directory /some/dir>
SetHandler mod_python
PythonHandler mod_python.publisher
</Directory>
And the following /some/dir/index.py file:
def index(req):
return "We are in index()"
def hello(req):
return "We are in hello()"
Then:
http://www.somehost/index/index will return "We are in index()"
http://www.somehost/index/ will return "We are in index()"
http://www.somehost/index/hello will return "We are in hello()"
http://www.somehost/hello will return "We are in hello()"
http://www.somehost/spam will return "404 Not Found"
|