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
|
<!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="dir-handlers-prrh.html">
<LINK REL="prev" href="dir-handlers.html">
<LINK REL="parent" href="dir-handlers.html">
<LINK REL="next" href="dir-handlers-prrh.html">
<meta name='aesop' content='information'>
<META NAME="description" CONTENT="Python*Handler Directive Syntax">
<META NAME="keywords" CONTENT="modpython">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<title>5.1.1 Python*Handler Directive Syntax</title>
</head>
<body>
<DIV CLASS="navigation">
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><a rel="prev" title="5.1 Request Handlers"
href="dir-handlers.html"><img src='previous.gif'
border='0' height='32' alt='Previous Page' width='32'></A></td>
<td><a rel="parent" title="5.1 Request Handlers"
href="dir-handlers.html"><img src='up.gif'
border='0' height='32' alt='Up One Level' width='32'></A></td>
<td><a rel="next" title="5.1.2 PythonPostReadRequestHandler"
href="dir-handlers-prrh.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="dir-handlers.html">5.1 Request Handlers</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="dir-handlers.html">5.1 Request Handlers</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="dir-handlers-prrh.html">5.1.2 PythonPostReadRequestHandler</A>
<br><hr>
</DIV>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION007110000000000000000"> </A>
<a name="l2h-244"> </a>
<BR>
5.1.1 Python*Handler Directive Syntax
</H2>
<P>
All request handler directives have the following syntax:
<P>
<code>Python*Handler <i>handler [handler ...] [ | .ext [.ext ...] ] </i> </code>
<P>
Where <var>handler</var> is a callable object that accepts a single
argument - request object, and <var>.ext</var> is a file extension.
<P>
Multiple handlers can be specified on a single line, in which case
they will be called sequentially, from left to right. Same handler
directives can be specified multiple times as well, with the same
result - all handlers listed will be executed sequentially, from first
to last. If any handler in the sequence returns a value other than
<code>apache.OK</code>, then execution of all subsequent handlers is aborted.
<P>
The list of handlers can optionally be followed by a <code>|</code> followed
by one or more file extensions. This would restrict the execution of
the handler to those file extensions only. This feature only works for
handlers executed after the trans phase.
<P>
A <i>handler</i> has the following syntax:
<P>
<code>module[::object]</code>
<P>
Where <var>module</var> can be a full module name (package dot notation is
accepted), and the optional <var>object</var> is the name of an object
inside the module.
<P>
Object can also contain dots, in which case it will be resolved from
left to right. During resolution, if mod_python encounters an object
of type <code><class></code>, it will try instantiating it passing it a single
argument, a request object.
<P>
If no object is specified, then it will default to the directive of
the handler, all lower case, with the word "<tt class="samp">python</tt>"removed. E.g. the default object for PythonAuthenHandler would be
authenhandler.
<P>
Example:
<P>
<div class="verbatim"><pre>
PythonAuthzHandler mypackage.mymodule::checkallowed
</pre></div>
<P>
For more information on handlers, see Overview of a Handler.
<P>
Side note: The "<tt class="samp">::</tt>" was chosen for performance reasons. In order for
Python to use objects inside modules, the modules first need to be
imported. Having the separator as simply a "<tt class="samp">.</tt>", would considerably
complicate process of sequentially evaluating every word to determine
whether it is a package, module, class etc. Using the (admittedly
un-Python-like) "<tt class="samp">::</tt>" takes the time consuming work of figuring out
where the module part ends and the object inside of it begins away
from mod_python resulting in a modest performance gain.
<P>
<DIV CLASS="navigation">
<p><hr>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td><a rel="prev" title="5.1 Request Handlers"
rel="prev" title="5.1 Request Handlers"
href="dir-handlers.html"><img src='previous.gif'
border='0' height='32' alt='Previous Page' width='32'></A></td>
<td><a rel="parent" title="5.1 Request Handlers"
rel="parent" title="5.1 Request Handlers"
href="dir-handlers.html"><img src='up.gif'
border='0' height='32' alt='Up One Level' width='32'></A></td>
<td><a rel="next" title="5.1.2 PythonPostReadRequestHandler"
rel="next" title="5.1.2 PythonPostReadRequestHandler"
href="dir-handlers-prrh.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="dir-handlers.html">5.1 Request Handlers</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="dir-handlers.html">5.1 Request Handlers</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="dir-handlers-prrh.html">5.1.2 PythonPostReadRequestHandler</A>
<hr>
<span class="release-info">Release 3.2.10, documentation updated on July 19, 2006.</span>
</DIV>
<!--End of Navigation Panel-->
</BODY>
</HTML>
|