/usr/share/doc/python-werkzeug-doc/html/middlewares.html is in python-werkzeug-doc 0.14.1+dfsg1-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 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 | <!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.14.1 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.14.1',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</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="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="HTTP Exceptions" href="exceptions.html" />
<link rel="prev" title="Context Locals" href="local.html" />
</head>
<body>
<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.14.1 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 them 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-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">werkzeug.wsgi</span> <span class="k">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="vm">__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-default"><div class="highlight"><pre><span></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="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 <a class="reference external" href="/usr/share/doc/python-doc/html/library/fnmatch.html#fnmatch.fnmatch" title="(in Python v2.7)"><code class="xref py py-func docutils literal"><span class="pre">fnmatch()</span></code></a>
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 list or dict of exported files and folders.</li>
<li><strong>disallow</strong> – a list of <a class="reference external" href="/usr/share/doc/python-doc/html/library/fnmatch.html#fnmatch.fnmatch" title="(in Python v2.7)"><code class="xref py py-func docutils literal"><span class="pre">fnmatch()</span></code></a> 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.ProxyMiddleware">
<em class="property">class </em><code class="descclassname">werkzeug.wsgi.</code><code class="descname">ProxyMiddleware</code><span class="sig-paren">(</span><em>app</em>, <em>targets</em>, <em>chunk_size=16384</em>, <em>timeout=10</em><span class="sig-paren">)</span><a class="headerlink" href="#werkzeug.wsgi.ProxyMiddleware" title="Permalink to this definition">¶</a></dt>
<dd><p>This middleware routes some requests to the provided WSGI app and
proxies some requests to an external server. This is not something that
can generally be done on the WSGI layer and some HTTP requests will not
tunnel through correctly (for instance websocket requests cannot be
proxied through WSGI). As a result this is only really useful for some
basic requests that can be forwarded.</p>
<p>Example configuration:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">app</span> <span class="o">=</span> <span class="n">ProxyMiddleware</span><span class="p">(</span><span class="n">app</span><span class="p">,</span> <span class="p">{</span>
<span class="s1">'/static/'</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">'target'</span><span class="p">:</span> <span class="s1">'http://127.0.0.1:5001/'</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">})</span>
</pre></div>
</div>
<p>For each host options can be specified. The following options are
supported:</p>
<dl class="docutils">
<dt><code class="docutils literal"><span class="pre">target</span></code>:</dt>
<dd>the target URL to dispatch to</dd>
<dt><code class="docutils literal"><span class="pre">remove_prefix</span></code>:</dt>
<dd>if set to <cite>True</cite> the prefix is chopped off the URL before
dispatching it to the server.</dd>
<dt><code class="docutils literal"><span class="pre">host</span></code>:</dt>
<dd>When set to <code class="docutils literal"><span class="pre">'<auto>'</span></code> which is the default the host header is
automatically rewritten to the URL of the target. If set to <cite>None</cite>
then the host header is unmodified from the client request. Any
other value overwrites the host header with that value.</dd>
<dt><code class="docutils literal"><span class="pre">headers</span></code>:</dt>
<dd>An optional dictionary of headers that should be sent with the
request to the target host.</dd>
<dt><code class="docutils literal"><span class="pre">ssl_context</span></code>:</dt>
<dd>In case this is an HTTPS target host then an SSL context can be
provided here (<a class="reference external" href="/usr/share/doc/python-doc/html/library/ssl.html#ssl.SSLContext" title="(in Python v2.7)"><code class="xref py py-class docutils literal"><span class="pre">ssl.SSLContext</span></code></a>). This can be used for instance
to disable SSL verification.</dd>
</dl>
<p>In this case everything below <code class="docutils literal"><span class="pre">'/static/'</span></code> is proxied to the server on
port 5001. The host header is automatically rewritten and so are request
URLs (eg: the leading <cite>/static/</cite> prefix here gets chopped off).</p>
<div class="versionadded">
<p><span class="versionmodified">New in version 0.14.</span></p>
</div>
</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-default"><div class="highlight"><pre><span></span><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.rst.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">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
© Copyright 2018, The Werkzeug Team.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>.
</div>
</body>
</html>
|