1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel="STYLESHEET" href="modpython.css" type='text/css'>
<link rel="first" href="modpython.html" title='Mod_python Manual'>
<link rel='contents' href='contents.html' title="Contents">
<link rel='index' href='genindex.html' title='Index'>
<link rel='last' href='about.html' title='About this document...'>
<link rel='help' href='about.html' title='About this document...'>
<LINK REL="next" href="hand-pub-alg-args.html">
<LINK REL="prev" href="hand-pub-alg.html">
<LINK REL="parent" href="hand-pub-alg.html">
<LINK REL="next" href="hand-pub-alg-args.html">
<meta name='aesop' content='information'>
<META NAME="description" CONTENT="Traversal">
<META NAME="keywords" CONTENT="modpython">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<title>6.1.2.1 Traversal</title>
</head>
<body>
<DIV CLASS="navigation">
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><a rel="prev" title="6.1.2 The Publishing Algorithm"
href="hand-pub-alg.html"><img src='previous.gif'
border='0' height='32' alt='Previous Page' width='32'></A></td>
<td><a rel="parent" title="6.1.2 The Publishing Algorithm"
href="hand-pub-alg.html"><img src='up.gif'
border='0' height='32' alt='Up One Level' width='32'></A></td>
<td><a rel="next" title="6.1.2.2 Argument Matching and"
href="hand-pub-alg-args.html"><img src='next.gif'
border='0' height='32' alt='Next Page' width='32'></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td><a rel="contents" title="Table of Contents"
href="contents.html"><img src='contents.gif'
border='0' height='32' alt='Contents' width='32'></A></td>
<td><img src='blank.gif'
border='0' height='32' alt='' width='32'></td>
<td><a rel="index" title="Index"
href="genindex.html"><img src='index.gif'
border='0' height='32' alt='Index' width='32'></A></td>
</tr></table>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="hand-pub-alg.html">6.1.2 The Publishing Algorithm</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="hand-pub-alg.html">6.1.2 The Publishing Algorithm</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="hand-pub-alg-args.html">6.1.2.2 Argument Matching and</A>
<br><hr>
</DIV>
<!--End of Navigation Panel-->
<H3><A NAME="SECTION008121000000000000000"> </A>
<BR>
6.1.2.1 Traversal
</H3>
<P>
The Publisher handler locates and imports the module specified in the
URI. The module location is determined from the <tt class="class">req.filename</tt>
attribute. Before importing, the file extension, if any, is
discarded.
<P>
If <tt class="class">req.filename</tt> is empty, the module name defaults to
"<tt class="samp">index</tt>".
<P>
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 <i class="dfn">traverses</i> the
path, one element at a time from left to right, mapping the elements
to Python object within the module.
<P>
If no path_info was given in the URL, the Publisher handler will use
the default value of "<tt class="samp">index</tt>". 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 "<tt class="samp">index</tt>".
<P>
The traversal will stop and <tt class="constant">HTTP_NOT_FOUND</tt> will be returned to
the client if:
<P>
<UL>
<LI>Any of the traversed object's names begin with an underscore
("<tt class="samp">_</tt>"). Use underscores to protect objects that should not be
accessible from the web.
<P>
</LI>
<LI>A module is encountered. Published objects cannot be modules for
security reasons.
<P>
</LI>
</UL>
<P>
If an object in the path could not be found, <tt class="constant">HTTP_NOT_FOUND</tt>
is returned to the client.
<P>
For example, given the following configuration:
<P>
<div class="verbatim"><pre>
DocumentRoot /some/dir
<Directory /some/dir>
SetHandler mod_python
PythonHandler mod_python.publisher
</Directory>
</pre></div>
<P>
And the following <span class="file">/some/dir/index.py</span> file:
<P>
<div class="verbatim"><pre>
def index(req):
return "We are in index()"
def hello(req):
return "We are in hello()"
</pre></div>
<P>
Then:
<P>
http://www.somehost/index/index will return "<tt class="samp">We are in index()</tt>"
<P>
http://www.somehost/index/ will return "<tt class="samp">We are in index()</tt>"
<P>
http://www.somehost/index/hello will return "<tt class="samp">We are in hello()</tt>"
<P>
http://www.somehost/hello will return "<tt class="samp">We are in hello()</tt>"
<P>
http://www.somehost/spam will return "<tt class="samp">404 Not Found</tt>"
<P>
<DIV CLASS="navigation">
<p><hr>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><a rel="prev" title="6.1.2 The Publishing Algorithm"
rel="prev" title="6.1.2 The Publishing Algorithm"
href="hand-pub-alg.html"><img src='previous.gif'
border='0' height='32' alt='Previous Page' width='32'></A></td>
<td><a rel="parent" title="6.1.2 The Publishing Algorithm"
rel="parent" title="6.1.2 The Publishing Algorithm"
href="hand-pub-alg.html"><img src='up.gif'
border='0' height='32' alt='Up One Level' width='32'></A></td>
<td><a rel="next" title="6.1.2.2 Argument Matching and"
rel="next" title="6.1.2.2 Argument Matching and"
href="hand-pub-alg-args.html"><img src='next.gif'
border='0' height='32' alt='Next Page' width='32'></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td><a rel="contents" title="Table of Contents"
rel="contents" title="Table of Contents"
href="contents.html"><img src='contents.gif'
border='0' height='32' alt='Contents' width='32'></A></td>
<td><img src='blank.gif'
border='0' height='32' alt='' width='32'></td>
<td><a rel="index" title="Index"
rel="index" title="Index"
href="genindex.html"><img src='index.gif'
border='0' height='32' alt='Index' width='32'></A></td>
</tr></table>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="hand-pub-alg.html">6.1.2 The Publishing Algorithm</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="hand-pub-alg.html">6.1.2 The Publishing Algorithm</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="hand-pub-alg-args.html">6.1.2.2 Argument Matching and</A>
<hr>
<span class="release-info">Release 3.2.10, documentation updated on July 19, 2006.</span>
</DIV>
<!--End of Navigation Panel-->
</BODY>
</HTML>
|