File: hand-pub-alg-trav.html

package info (click to toggle)
libapache2-mod-python 3.2.10-4
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 2,476 kB
  • ctags: 2,034
  • sloc: ansic: 5,218; python: 5,195; makefile: 282; sh: 270; lex: 246
file content (189 lines) | stat: -rw-r--r-- 6,708 bytes parent folder | download
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">&nbsp;</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

  &lt;Directory /some/dir&gt;
  SetHandler mod_python
  PythonHandler mod_python.publisher
  &lt;/Directory&gt;
</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>