Sophie

Sophie

distrib > Mageia > 7 > armv7hl > media > core-release > by-pkgid > f57b2cbc6bd4a90f10089095b1f7fb88 > files > 91

python3-routes-2.4.1-1.mga7.noarch.rpm


<!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="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>RESTful services &#8212; Routes 2.4.1 documentation</title>
    <link rel="stylesheet" href="_static/classic.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></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>
    <script type="text/javascript" src="_static/language_data.js"></script>
    
    <link rel="index" title="Index" href="genindex.html" />
    <link rel="search" title="Search" href="search.html" />
    <link rel="next" title="Unicode, Redirects, and More" href="uni_redirect_rest.html" />
    <link rel="prev" title="Generation" href="generating.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="uni_redirect_rest.html" title="Unicode, Redirects, and More"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="generating.html" title="Generation"
             accesskey="P">previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">Routes 2.4.1 documentation</a> &#187;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="restful-services">
<h1>RESTful services<a class="headerlink" href="#restful-services" title="Permalink to this headline">¶</a></h1>
<p>Routes makes it easy to configure RESTful web services.  <code class="docutils literal notranslate"><span class="pre">map.resource</span></code>
creates a set of add/modify/delete routes conforming to the Atom publishing
protocol.</p>
<p>A resource route addresses <em>members</em> in a <em>collection</em>, and the collection
itself.  Normally a collection is a plural word, and a member is the
corresponding singular word.  For instance, consider a collection of messages:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;messages&quot;</span><span class="p">)</span>

<span class="c1"># The above command sets up several routes as if you had typed the</span>
<span class="c1"># following commands:</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;create&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;POST&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;index&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;formatted_messages&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages.</span><span class="si">{format}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;index&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;new_message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/new&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;new&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;formatted_new_message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/new.</span><span class="si">{format}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;new&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;update&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;PUT&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;delete&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;DELETE&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;edit_message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">/edit&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;edit&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;formatted_edit_message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">.</span><span class="si">{format}</span><span class="s2">/edit&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;edit&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;show&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
<span class="nb">map</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="s2">&quot;formatted_message&quot;</span><span class="p">,</span> <span class="s2">&quot;/messages/</span><span class="si">{id}</span><span class="s2">.</span><span class="si">{format}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;show&quot;</span><span class="p">,</span>
    <span class="n">conditions</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">method</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;GET&quot;</span><span class="p">]))</span>
</pre></div>
</div>
<p>This establishes the following convention:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">GET</span>    <span class="o">/</span><span class="n">messages</span>        <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">index</span><span class="p">()</span>    <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;messages&quot;</span><span class="p">)</span>
<span class="n">POST</span>   <span class="o">/</span><span class="n">messages</span>        <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">create</span><span class="p">()</span>   <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;messages&quot;</span><span class="p">)</span>
<span class="n">GET</span>    <span class="o">/</span><span class="n">messages</span><span class="o">/</span><span class="n">new</span>    <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">new</span><span class="p">()</span>      <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;new_message&quot;</span><span class="p">)</span>
<span class="n">PUT</span>    <span class="o">/</span><span class="n">messages</span><span class="o">/</span><span class="mi">1</span>      <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">DELETE</span> <span class="o">/</span><span class="n">messages</span><span class="o">/</span><span class="mi">1</span>      <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">GET</span>    <span class="o">/</span><span class="n">messages</span><span class="o">/</span><span class="mi">1</span>      <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>   <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">GET</span>    <span class="o">/</span><span class="n">messages</span><span class="o">/</span><span class="mi">1</span><span class="o">/</span><span class="n">edit</span> <span class="o">=&gt;</span> <span class="n">messages</span><span class="o">.</span><span class="n">edit</span><span class="p">(</span><span class="nb">id</span><span class="p">)</span>   <span class="o">=&gt;</span> <span class="n">url</span><span class="p">(</span><span class="s2">&quot;edit_message&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
</pre></div>
</div>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Due to how Routes matches a list of URL’s, it has no inherent knowledge of
a route being a <strong>resource</strong>. As such, if a route fails to match due to
the method requirements not being met, a 404 will return just like any
other failure to match a route.</p>
</div>
<p>Thus, you GET the collection to see an index of links to members (“index”
method).  You GET a member to see it (“show”).  You GET “COLLECTION/new” to
obtain a new message form (“new”), which you POST to the collection (“create”).
You GET “MEMBER/edit” to obtain an edit for (“edit”), which you PUT to the
member (“update”).  You DELETE the member to delete it.  Note that there are
only four route names because multiple actions are doubled up on the same URLs.</p>
<p>This URL structure may look strange if you’re not used to the Atom protocol.
REST is a vague term, and some people think it means proper URL syntax (every
component contains the one on its right), others think it means not putting IDs
in query parameters, and others think it means using HTTP methods beyond GET
and POST.  <code class="docutils literal notranslate"><span class="pre">map.resource</span></code> does all three, but it may be overkill for
applications that don’t need Atom compliance or prefer to stick with GET and
POST.  <code class="docutils literal notranslate"><span class="pre">map.resource</span></code> has the advantage that many automated tools and
non-browser agents will be able to list and modify your resources without any
programming on your part.  But you don’t have to use it if you prefer a simpler
add/modify/delete structure.</p>
<p>HTML forms can produce only GET and POST requests.  As a workaround, if a POST
request contains a <code class="docutils literal notranslate"><span class="pre">_method</span></code> parameter, the Routes middleware changes the
HTTP method to whatever the parameter specifies, as if it had been requested
that way in the first place.  This convention is becoming increasingly common
in other frameworks.  If you’re using WebHelpers, the The WebHelpers <code class="docutils literal notranslate"><span class="pre">form</span></code>
function has a <code class="docutils literal notranslate"><span class="pre">method</span></code> argument which automatically sets the HTTP method and
“_method” parameter.</p>
<p>Several routes are paired with an identical route containing the <code class="docutils literal notranslate"><span class="pre">format</span></code>
variable.  The intention is to allow users to obtain different formats by means
of filename suffixes; e.g., “/messages/1.xml”.  This produces a routing
variable “xml”, which in Pylons will be passed to the controller action if it
defines a formal argument for it.  In generation you can pass the <code class="docutils literal notranslate"><span class="pre">format</span></code>
argument to produce a URL with that suffix:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">url</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="s2">&quot;xml&quot;</span><span class="p">)</span>  <span class="o">=&gt;</span>  <span class="s2">&quot;/messages/1.xml&quot;</span>
</pre></div>
</div>
<p>Routes does not recognize any particular formats or know which ones are valid
for your application.  It merely passes the <code class="docutils literal notranslate"><span class="pre">format</span></code> attribute through if it
appears.</p>
<p>New in Routes 1.7.3: changed URL suffix from “;edit” to “/edit”.  Semicolons
are not allowed in the path portion of a URL except to delimit path parameters,
which nobody uses.</p>
<div class="section" id="resource-options">
<h2>Resource options<a class="headerlink" href="#resource-options" title="Permalink to this headline">¶</a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">map.resource</span></code> method recognizes a number of keyword args which modifies
its behavior:</p>
<p>controller</p>
<blockquote>
<div>Use the specified controller rather than deducing it from the collection
name.</div></blockquote>
<p>collection</p>
<blockquote>
<div><p>Additional URLs to allow for the collection.  Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">collection</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;rss&quot;</span><span class="p">:</span> <span class="s2">&quot;GET&quot;</span><span class="p">})</span>
<span class="c1"># &quot;GET /message/rss&quot;  =&gt;  ``Messages.rss()``.</span>
<span class="c1"># Defines a named route &quot;rss_messages&quot;.</span>
</pre></div>
</div>
</div></blockquote>
<p>member</p>
<blockquote>
<div><p>Additional URLs to allow for a member.  Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">,</span> <span class="s1">&#39;messages&#39;</span><span class="p">,</span> <span class="n">member</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;mark&#39;</span><span class="p">:</span><span class="s1">&#39;POST&#39;</span><span class="p">})</span>
<span class="c1"># &quot;POST /message/1/mark&quot;  =&gt;  ``Messages.mark(1)``</span>
<span class="c1"># also adds named route &quot;mark_message&quot;</span>
</pre></div>
</div>
<p>This can be used to display a delete confirmation form:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">member</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ask_delete&quot;</span><span class="p">:</span> <span class="s2">&quot;GET&quot;</span><span class="p">}</span>
<span class="c1"># &quot;GET /message/1/ask_delete&quot;   =&gt;   ``Messages.ask_delete(1)``.</span>
<span class="c1"># Also adds a named route &quot;ask_delete_message&quot;.</span>
</pre></div>
</div>
</div></blockquote>
<p>new</p>
<blockquote>
<div><p>Additional URLs to allow for new-member functionality.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;preview&quot;</span><span class="p">:</span> <span class="s2">&quot;POST&quot;</span><span class="p">})</span>
<span class="c1"># &quot;POST /messages/new/preview&quot;</span>
</pre></div>
</div>
</div></blockquote>
<p>path_prefix</p>
<blockquote>
<div>Prepend the specified prefix to all URL patterns.  The prefix may include
path variables.  This is mainly used to nest resources within resources.</div></blockquote>
<p>name_prefix</p>
<blockquote>
<div><p>Prefix the specified string to all route names.  This is most often
combined with <code class="docutils literal notranslate"><span class="pre">path_prefix</span></code> to nest resources:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">map</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">,</span> <span class="s2">&quot;messages&quot;</span><span class="p">,</span> <span class="n">controller</span><span class="o">=</span><span class="s2">&quot;categories&quot;</span><span class="p">,</span>
    <span class="n">path_prefix</span><span class="o">=</span><span class="s2">&quot;/category/</span><span class="si">{category_id}</span><span class="s2">&quot;</span><span class="p">,</span>
    <span class="n">name_prefix</span><span class="o">=</span><span class="s2">&quot;category_&quot;</span><span class="p">)</span>
<span class="c1"># GET /category/7/message/1</span>
<span class="c1"># Adds named route &quot;category_message&quot;</span>
</pre></div>
</div>
</div></blockquote>
<p>parent_resource</p>
<blockquote>
<div><p>A dict containing information about the parent resource, for creating a
nested resource. It should contain the member_name and collection_name
of the parent resource. This dict will be available via the associated
Route object which can be accessed during a request via
<code class="docutils literal notranslate"><span class="pre">request.environ[&quot;routes.route&quot;]</span></code>.</p>
<p>If parent_resource is supplied and path_prefix isn’t, path_prefix will
be generated from parent_resource as “&lt;parent collection name&gt;/:&lt;parent
member name&gt;_id”.</p>
<p>If parent_resource is supplied and name_prefix isn’t, name_prefix will
be generated from parent_resource as “&lt;parent member name&gt;_”.</p>
<p>Example:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">Mapper</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s1">&#39;location&#39;</span><span class="p">,</span> <span class="s1">&#39;locations&#39;</span><span class="p">,</span>
<span class="gp">... </span>           <span class="n">parent_resource</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">member_name</span><span class="o">=</span><span class="s1">&#39;region&#39;</span><span class="p">,</span>
<span class="gp">... </span>                                <span class="n">collection_name</span><span class="o">=</span><span class="s1">&#39;regions&#39;</span><span class="p">))</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># path_prefix is &quot;regions/:region_id&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># name prefix is &quot;region_&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;region_locations&#39;</span><span class="p">,</span> <span class="n">region_id</span><span class="o">=</span><span class="mi">13</span><span class="p">)</span>
<span class="go">&#39;/regions/13/locations&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;region_new_location&#39;</span><span class="p">,</span> <span class="n">region_id</span><span class="o">=</span><span class="mi">13</span><span class="p">)</span>
<span class="go">&#39;/regions/13/locations/new&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;region_location&#39;</span><span class="p">,</span> <span class="n">region_id</span><span class="o">=</span><span class="mi">13</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
<span class="go">&#39;/regions/13/locations/60&#39;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;region_edit_location&#39;</span><span class="p">,</span> <span class="n">region_id</span><span class="o">=</span><span class="mi">13</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
<span class="go">&#39;/regions/13/locations/60/edit&#39;</span>

<span class="go">Overriding generated path_prefix:</span>

<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">Mapper</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s1">&#39;location&#39;</span><span class="p">,</span> <span class="s1">&#39;locations&#39;</span><span class="p">,</span>
<span class="gp">... </span>           <span class="n">parent_resource</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">member_name</span><span class="o">=</span><span class="s1">&#39;region&#39;</span><span class="p">,</span>
<span class="gp">... </span>                                <span class="n">collection_name</span><span class="o">=</span><span class="s1">&#39;regions&#39;</span><span class="p">),</span>
<span class="gp">... </span>           <span class="n">path_prefix</span><span class="o">=</span><span class="s1">&#39;areas/:area_id&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># name prefix is &quot;region_&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;region_locations&#39;</span><span class="p">,</span> <span class="n">area_id</span><span class="o">=</span><span class="mi">51</span><span class="p">)</span>
<span class="go">&#39;/areas/51/locations&#39;</span>

<span class="go">Overriding generated name_prefix:</span>

<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span> <span class="o">=</span> <span class="n">Mapper</span><span class="p">()</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">m</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="s1">&#39;location&#39;</span><span class="p">,</span> <span class="s1">&#39;locations&#39;</span><span class="p">,</span>
<span class="gp">... </span>           <span class="n">parent_resource</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">member_name</span><span class="o">=</span><span class="s1">&#39;region&#39;</span><span class="p">,</span>
<span class="gp">... </span>                                <span class="n">collection_name</span><span class="o">=</span><span class="s1">&#39;regions&#39;</span><span class="p">),</span>
<span class="gp">... </span>           <span class="n">name_prefix</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="c1"># path_prefix is &quot;regions/:region_id&quot;</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">url</span><span class="p">(</span><span class="s1">&#39;locations&#39;</span><span class="p">,</span> <span class="n">region_id</span><span class="o">=</span><span class="mi">51</span><span class="p">)</span>
<span class="go">&#39;/regions/51/locations&#39;</span>
</pre></div>
</div>
</div></blockquote>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h3><a href="index.html">Table of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">RESTful services</a><ul>
<li><a class="reference internal" href="#resource-options">Resource options</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="generating.html"
                        title="previous chapter">Generation</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="uni_redirect_rest.html"
                        title="next chapter">Unicode, Redirects, and More</a></p>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="_sources/restful.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3>Quick search</h3>
    <div class="searchformwrapper">
    <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>
    </div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <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"
             >index</a></li>
        <li class="right" >
          <a href="uni_redirect_rest.html" title="Unicode, Redirects, and More"
             >next</a> |</li>
        <li class="right" >
          <a href="generating.html" title="Generation"
             >previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="index.html">Routes 2.4.1 documentation</a> &#187;</li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2005-2017, Ben Bangert, Mike Orr, and numerous contributers.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.3.
    </div>
  </body>
</html>