document.open();document.writeln('<div onmouseover="document.getElementById(\'snipt-4838\').style.display = \'block\'; return false;" onmouseout="document.getElementById(\'snipt-4838\').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.db</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">models</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">django.utils.translation</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">ugettext_lazy</span> <span style="color: #6ab825; font-weight: normal">as</span> <span style="color: #d0d0d0">_</span>');document.writeln('<span style="color: #6ab825; font-weight: normal">from</span> <span style="color: #447fcf; text-decoration: underline">django.utils.http</span> <span style="color: #6ab825; font-weight: normal">import</span> <span style="color: #d0d0d0">int_to_base36</span> <span style="color: #6ab825; font-weight: normal">as</span> <span style="color: #d0d0d0">getTinyKey</span>');document.writeln('');document.writeln('');document.writeln('');document.writeln('<span style="color: #6ab825; font-weight: normal">class</span> <span style="color: #447fcf; text-decoration: underline">ShortUrl</span><span style="color: #d0d0d0">(models.Model):</span>');document.writeln('    <span style="color: #d0d0d0">url</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">models.URLField(_(</span><span style="color: #ed9d13">&#39;URL&#39;</span><span style="color: #d0d0d0">),verify_exists=</span><span style="color: #24909d">False</span><span style="color: #d0d0d0">,blank=</span><span style="color: #24909d">False</span><span style="color: #d0d0d0">,null=</span><span style="color: #24909d">False</span><span style="color: #d0d0d0">,max_length=</span><span style="color: #3677a9">255</span><span style="color: #d0d0d0">)</span>');document.writeln('    <span style="color: #d0d0d0">tinykey</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">models.CharField(_(</span><span style="color: #ed9d13">&#39;Tiny Key&#39;</span><span style="color: #d0d0d0">),max_length=</span><span style="color: #3677a9">20</span><span style="color: #d0d0d0">,blank=</span><span style="color: #24909d">True</span><span style="color: #d0d0d0">,editable=</span><span style="color: #24909d">False</span><span style="color: #d0d0d0">)</span>');document.writeln('    <span style="color: #d0d0d0">contor</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">models.IntegerField(_(</span><span style="color: #ed9d13">&#39;CONTOR&#39;</span><span style="color: #d0d0d0">),default=</span><span style="color: #3677a9">0</span><span style="color: #d0d0d0">)</span>');document.writeln('    <span style="color: #d0d0d0">crdate</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">models.DateTimeField(_(</span><span style="color: #ed9d13">&#39;created&#39;</span><span style="color: #d0d0d0">),</span> <span style="color: #d0d0d0">auto_now_add=</span><span style="color: #24909d">True</span><span style="color: #d0d0d0">)</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">class</span> <span style="color: #447fcf; text-decoration: underline">Meta</span><span style="color: #d0d0d0">:</span>');document.writeln('        <span style="color: #d0d0d0">verbose_name</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">_(</span><span style="color: #ed9d13">&#39;URL&#39;</span><span style="color: #d0d0d0">)</span>');document.writeln('        <span style="color: #d0d0d0">verbose_name_plural</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">_(</span><span style="color: #ed9d13">&#39;URLs&#39;</span><span style="color: #d0d0d0">)</span>');document.writeln('        <span style="color: #d0d0d0">db_table</span> <span style="color: #d0d0d0">=</span> <span style="color: #ed9d13">&#39;urls&#39;</span>');document.writeln('        <span style="color: #d0d0d0">ordering</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">(</span><span style="color: #ed9d13">&#39;-id&#39;</span><span style="color: #d0d0d0">,)</span>');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">__str__</span><span style="color: #d0d0d0">(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">):</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">return</span> <span style="color: #ed9d13">u&#39;%s&#39;</span> <span style="color: #d0d0d0">%</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">.url</span>');document.writeln('');document.writeln('');document.writeln('    <span style="color: #6ab825; font-weight: normal">def</span> <span style="color: #447fcf">save</span><span style="color: #d0d0d0">(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">):</span>');document.writeln('        <span style="color: #ed9d13">&quot;&quot;&quot;</span>');document.writeln('<span style="color: #ed9d13">        from shorturl.settings import URL_RESTRICTS</span>');document.writeln('<span style="color: #ed9d13">        import re</span>');document.writeln('<span style="color: #ed9d13">        for pattern in URL_RESTRICTS:</span>');document.writeln('<span style="color: #ed9d13">            if re.match(pattern, self.url, re.I):</span>');document.writeln('<span style="color: #ed9d13">                raise Exception(&#39;URL restricted&#39;)</span>');document.writeln('<span style="color: #ed9d13">        &quot;&quot;&quot;</span>');document.writeln('        <span style="color: #24909d">super</span><span style="color: #d0d0d0">(ShortUrl,</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">).save()</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">try</span><span style="color: #d0d0d0">:</span>');document.writeln('            <span style="color: #24909d">self</span><span style="color: #d0d0d0">.tinykey</span> <span style="color: #d0d0d0">=</span> <span style="color: #d0d0d0">getTinyKey(</span><span style="color: #24909d">self</span><span style="color: #d0d0d0">.id)</span>');document.writeln('            <span style="color: #24909d">super</span><span style="color: #d0d0d0">(ShortUrl,</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">).save()</span>');document.writeln('        <span style="color: #6ab825; font-weight: normal">except</span><span style="color: #d0d0d0">:</span>');document.writeln('            <span style="color: #24909d">super</span><span style="color: #d0d0d0">(ShortUrl,</span> <span style="color: #24909d">self</span><span style="color: #d0d0d0">).delete()</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-4838">code hosted by <a href="http://snipt.net/raduboncea/short-url-model" style="color: #0084FF; text-decoration: none;">snipt.net</a></div>');document.writeln('</div>');document.close();