document.open();document.writeln('<div onmouseover="document.getElementById(\'snipt-4840\').style.display = \'block\'; return false;" onmouseout="document.getElementById(\'snipt-4840\').style.display = \'none\'; return false;" style="position: relative;">');document.writeln('<div class="highlight"><pre style="-moz-border-radius: 5px; border-radius: 5px; -webkit-border-radius: 5px; margin: 0; display: block; font: 11px Monaco, monospace !important; padding: 15px; background-color: #1C1C1C; overflow: auto; color: #D0D0D0;"><span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">django.shortcuts</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">render_to_response,</span> <span style="color: #d0d0d0">get_object_or_404</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">django.template</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">RequestContext</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">django.http</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">Http404,</span> <span style="color: #d0d0d0">HttpResponseRedirect</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">urlfier.models</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">*</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #447fcf; text-decoration: underline">urllib2</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">shorturl.settings</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">URL_RESTRICTS</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #447fcf; text-decoration: underline">re</span>');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">shorturl_form</span><span style="color: #d0d0d0">(request):</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">render_to_response(</span><span style="color: #ed9d13">&#39;urlfier/shorturl.html&#39;</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">{})</span>');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">do_redirect</span><span style="color: #d0d0d0">(request,</span> <span style="color: #d0d0d0">tinykey=</span><span style="color: #24909d">None</span><span style="color: #d0d0d0">):</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">try</span><span style="color: #d0d0d0">:</span>');document.writeln('        <span style="color: #d0d0d0">u</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">ShortUrl.objects.get(tinykey=tinykey)</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">print</span> <span style="color: #d0d0d0">u.url</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">except</span> <span style="color: #d0d0d0">ShortUrl.DoesNotExist:</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">raise</span> <span style="color: #d0d0d0">Http404</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">for</span> <span style="color: #d0d0d0">pattern</span> <span style="color: #6ab825; font-weight: normal">in</span> <span style="color: #d0d0d0">URL_RESTRICTS:</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">if</span> <span style="color: #d0d0d0">re.match(pattern,</span> <span style="color: #d0d0d0">u.url,</span> <span style="color: #d0d0d0">re.I):</span>');document.writeln('            <span style="color: #6ab825; font-weight: normal">raise</span> <span style="color: #d0d0d0">Http404</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">try</span><span style="color: #d0d0d0">:</span>');document.writeln('        <span style="color: #d0d0d0">opener</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">urllib2.build_opener(SmartRedirectHandler())</span>');document.writeln('        <span style="color: #d0d0d0">f</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">opener.open(u.url)</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">except</span> <span style="color: #d0d0d0">(urllib2.URLError,urllib2.HTTPError):</span>');document.writeln('        <span style="color: #d0d0d0">u.contor</span> <span style="color: #d0d0d0">+=</span> <span style="color: #3677a9">1</span>');document.writeln('        <span style="color: #d0d0d0">u.save()</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">HttpResponseRedirect(u.url)</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">except</span> <span style="color: #bbbbbb">Exception</span><span style="color: #d0d0d0">:</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">raise</span> <span style="color: #d0d0d0">Http404</span>');document.writeln('');document.writeln('    <span style="color: #d0d0d0">u.contor</span> <span style="color: #d0d0d0">+=</span> <span style="color: #3677a9">1</span>');document.writeln('    <span style="color: #d0d0d0">u.save()</span>');document.writeln('    <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">HttpResponseRedirect(u.url)</span>');document.writeln('');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">class</span> <span style="color: #447fcf; text-decoration: underline">SmartRedirectHandler</span><span style="color: #d0d0d0">(urllib2.HTTPRedirectHandler):</span>');document.writeln('    <span style="color: #d0d0d0">recursion</span> <span style="color: #d0d0d0">=</span> <span style="color: #3677a9">0</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">http_error_301</span><span style="color: #d0d0d0">(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">req,</span> <span style="color: #d0d0d0">fp,</span> <span style="color: #d0d0d0">code,</span> <span style="color: #d0d0d0">msg,</span> <span style="color: #d0d0d0">headers):</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">if</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">.recursion&gt;</span><span style="color: #3677a9">2</span><span style="color: #d0d0d0">:</span>');document.writeln('            <span style="color: #6ab825; font-weight: normal">raise</span> <span style="color: #bbbbbb">Exception</span><span style="color: #d0d0d0">(</span><span style="color: #ed9d13">&quot;I won&#39;t follow redirects&quot;</span><span style="color: #d0d0d0">)</span>');document.writeln('        <span style="color: #24909d">self</span><span style="color: #d0d0d0">.recursion</span> <span style="color: #d0d0d0">+=</span> <span style="color: #3677a9">1</span>');document.writeln('        <span style="color: #d0d0d0">result</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">urllib2.HTTPRedirectHandler.http_error_301(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">req,</span> <span style="color: #d0d0d0">fp,</span> <span style="color: #d0d0d0">code,</span> <span style="color: #d0d0d0">msg,</span> <span style="color: #d0d0d0">headers)</span>');document.writeln('        <span style="color: #d0d0d0">result.status</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">code</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">result</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">http_error_302</span><span style="color: #d0d0d0">(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">req,</span> <span style="color: #d0d0d0">fp,</span> <span style="color: #d0d0d0">code,</span> <span style="color: #d0d0d0">msg,</span> <span style="color: #d0d0d0">headers):</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">if</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">.recursion&gt;</span><span style="color: #3677a9">2</span><span style="color: #d0d0d0">:</span>');document.writeln('            <span style="color: #6ab825; font-weight: normal">raise</span> <span style="color: #bbbbbb">Exception</span><span style="color: #d0d0d0">(</span><span style="color: #ed9d13">&quot;I won&#39;t follow redirects&quot;</span><span style="color: #d0d0d0">)</span>');document.writeln('        <span style="color: #24909d">self</span><span style="color: #d0d0d0">.recursion</span> <span style="color: #d0d0d0">+=</span> <span style="color: #3677a9">1</span>');document.writeln('        <span style="color: #d0d0d0">result</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">urllib2.HTTPRedirectHandler.http_error_302(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">,</span> <span style="color: #d0d0d0">req,</span> <span style="color: #d0d0d0">fp,</span> <span style="color: #d0d0d0">code,</span> <span style="color: #d0d0d0">msg,</span> <span style="color: #d0d0d0">headers)</span>');document.writeln('        <span style="color: #d0d0d0">result.status</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">code</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #d0d0d0">result</span>');document.writeln('</pre></div>');document.writeln('');document.writeln('<div style="background-color: #111; color: #D0D0D0; float: right; padding: 5px 10px; -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; border-top-left-radius: 5px; -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; font: 11px Arial,Sans-Serif; display: none; position: absolute; bottom: 0; right: 0;" id="snipt-4840">code hosted by <a href="http://snipt.net/raduboncea/short-url-view" style="color: #0084FF; text-decoration: none;">snipt.net</a></div>');document.writeln('</div>');document.close();