/usr/share/doc/python-werkzeug-doc/html/middlewares.html is in python-werkzeug-doc 0.10.4+dfsg1-1ubuntu1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 190 191 192 193 194 195 196 197 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Middlewares — Werkzeug 0.10.4 documentation</title>
<link rel="stylesheet" href="_static/werkzeug.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.10.4',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Werkzeug 0.10.4 documentation" href="index.html" />
<link rel="next" title="HTTP Exceptions" href="exceptions.html" />
<link rel="prev" title="Context Locals" href="local.html" />
</head>
<body role="document">
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="exceptions.html" title="HTTP Exceptions"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="local.html" title="Context Locals"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="index.html">Werkzeug 0.10.4 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-werkzeug.wsgi">
<span id="middlewares"></span><h1>Middlewares<a class="headerlink" href="#module-werkzeug.wsgi" title="Permalink to this headline">¶</a></h1>
<p>Middlewares wrap applications to dispatch between then or provide
additional request handling. Additionally to the middlewares documented
here, there is also the <code class="xref py py-class docutils literal"><span class="pre">DebuggedApplication</span></code> class that is
implemented as a WSGI middleware.</p>
<dl class="class">
<dt id="werkzeug.wsgi.SharedDataMiddleware">
<em class="property">class </em><code class="descclassname">werkzeug.wsgi.</code><code class="descname">SharedDataMiddleware</code><span class="sig-paren">(</span><em>app</em>, <em>exports</em>, <em>disallow=None</em>, <em>cache=True</em>, <em>cache_timeout=43200</em>, <em>fallback_mimetype='text/plain'</em><span class="sig-paren">)</span><a class="headerlink" href="#werkzeug.wsgi.SharedDataMiddleware" title="Permalink to this definition">¶</a></dt>
<dd><p>A WSGI middleware that provides static content for development
environments or simple server setups. Usage is quite simple:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">werkzeug.wsgi</span> <span class="kn">import</span> <span class="n">SharedDataMiddleware</span>
<span class="n">app</span> <span class="o">=</span> <span class="n">SharedDataMiddleware</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'/shared'</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">__file__</span><span class="p">),</span> <span class="s1">'shared'</span><span class="p">)</span>
<span class="p">})</span>
</pre></div>
</div>
<p>The contents of the folder <code class="docutils literal"><span class="pre">./shared</span></code> will now be available on
<code class="docutils literal"><span class="pre">http://example.com/shared/</span></code>. This is pretty useful during development
because a standalone media server is not required. One can also mount
files on the root folder and still continue to use the application because
the shared data middleware forwards all unhandled requests to the
application, even if the requests are below one of the shared folders.</p>
<p>If <cite>pkg_resources</cite> is available you can also tell the middleware to serve
files from package data:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">app</span> <span class="o">=</span> <span class="n">SharedDataMiddleware</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'/shared'</span><span class="p">:</span> <span class="p">(</span><span class="s1">'myapplication'</span><span class="p">,</span> <span class="s1">'shared_files'</span><span class="p">)</span>
<span class="p">})</span>
</pre></div>
</div>
<p>This will then serve the <code class="docutils literal"><span class="pre">shared_files</span></code> folder in the <cite>myapplication</cite>
Python package.</p>
<p>The optional <cite>disallow</cite> parameter can be a list of <code class="xref py py-func docutils literal"><span class="pre">fnmatch()</span></code>
rules for files that are not accessible from the web. If <cite>cache</cite> is set to
<cite>False</cite> no caching headers are sent.</p>
<p>Currently the middleware does not support non ASCII filenames. If the
encoding on the file system happens to be the encoding of the URI it may
work but this could also be by accident. We strongly suggest using ASCII
only file names for static files.</p>
<p>The middleware will guess the mimetype using the Python <cite>mimetype</cite>
module. If it’s unable to figure out the charset it will fall back
to <cite>fallback_mimetype</cite>.</p>
<div class="versionchanged">
<p><span class="versionmodified">Changed in version 0.5: </span>The cache timeout is configurable now.</p>
</div>
<div class="versionadded">
<p><span class="versionmodified">New in version 0.6: </span>The <cite>fallback_mimetype</cite> parameter was added.</p>
</div>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>app</strong> – the application to wrap. If you don’t want to wrap an
application you can pass it <code class="xref py py-exc docutils literal"><span class="pre">NotFound</span></code>.</li>
<li><strong>exports</strong> – a dict of exported files and folders.</li>
<li><strong>disallow</strong> – a list of <code class="xref py py-func docutils literal"><span class="pre">fnmatch()</span></code> rules.</li>
<li><strong>fallback_mimetype</strong> – the fallback mimetype for unknown files.</li>
<li><strong>cache</strong> – enable or disable caching headers.</li>
<li><strong>cache_timeout</strong> – the cache timeout in seconds for the headers.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<dl class="method">
<dt id="werkzeug.wsgi.SharedDataMiddleware.is_allowed">
<code class="descname">is_allowed</code><span class="sig-paren">(</span><em>filename</em><span class="sig-paren">)</span><a class="headerlink" href="#werkzeug.wsgi.SharedDataMiddleware.is_allowed" title="Permalink to this definition">¶</a></dt>
<dd><p>Subclasses can override this method to disallow the access to
certain files. However by providing <cite>disallow</cite> in the constructor
this method is overwritten.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="werkzeug.wsgi.DispatcherMiddleware">
<em class="property">class </em><code class="descclassname">werkzeug.wsgi.</code><code class="descname">DispatcherMiddleware</code><span class="sig-paren">(</span><em>app</em>, <em>mounts=None</em><span class="sig-paren">)</span><a class="headerlink" href="#werkzeug.wsgi.DispatcherMiddleware" title="Permalink to this definition">¶</a></dt>
<dd><p>Allows one to mount middlewares or applications in a WSGI application.
This is useful if you want to combine multiple WSGI applications:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">app</span> <span class="o">=</span> <span class="n">DispatcherMiddleware</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'/app2'</span><span class="p">:</span> <span class="n">app2</span><span class="p">,</span>
<span class="s1">'/app3'</span><span class="p">:</span> <span class="n">app3</span>
<span class="p">})</span>
</pre></div>
</div>
</dd></dl>
<p>Also there’s the …</p>
<dl class="function">
<dt id="werkzeug._internal._easteregg">
<code class="descclassname">werkzeug._internal.</code><code class="descname">_easteregg</code><span class="sig-paren">(</span><em>app=None</em><span class="sig-paren">)</span><a class="headerlink" href="#werkzeug._internal._easteregg" title="Permalink to this definition">¶</a></dt>
<dd><p>Like the name says. But who knows how it works?</p>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"><p class="logo"><a href="index.html">
<img class="logo" src="_static/werkzeug.png" alt="Logo"/>
</a></p><h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="local.html" title="previous chapter">Context Locals</a></li>
<li>Next: <a href="exceptions.html" title="next chapter">HTTP Exceptions</a></li>
</ul></li>
</ul>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/middlewares.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
© Copyright 2011, The Werkzeug Team.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>.
</div>
</body>
</html>
|