tag:blogger.com,1999:blog-50831494173368063062024-03-08T21:38:49.398+05:30Z Raw/sē/ /rô/Unknownnoreply@blogger.comBlogger3125tag:blogger.com,1999:blog-5083149417336806306.post-55671309979051658642012-07-27T12:11:00.001+05:302012-07-27T14:29:48.079+05:30Django login with email or username<p>
My new django project requires users to log in using their username or email. I googled and searched SO for a solution. But most of them were for authentication using email or creating a new backend. I wanted to allow my users to log in using email or username and I am too lazy to write a new authentication backend. So I extended default django <a href="https://github.com/django/django/blob/master/django/contrib/auth/forms.py" rel="nofollow" target="_blank">authentication form</a> . And with the help of this <a href="http://djangosnippets.org/snippets/1001/" rel="nofollow" target="_blank">snippet</a> I came up with this solution. And obviously emails for users are made unique.<p />
<h5>
forms.py</h5>
<div class="monokai">
<pre><span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">ugettext</span><span class="p">,</span> <span class="n">ugettext_lazy</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">django.contrib.auth.forms</span> <span class="kn">import</span> <span class="n">AuthenticationForm</span>
<span class="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="kn">import</span> <span class="n">authenticate</span>
<span class="k">class</span> <span class="nc">MyAuthenticationForm</span><span class="p">(</span><span class="n">AuthenticationForm</span><span class="p">):</span>
<span class="n">username</span> <span class="o">=</span> <span class="n">forms</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">label</span><span class="o">=</span><span class="n">_</span><span class="p">(</span><span class="s">"Username"</span><span class="p">),</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
<span class="c">#max length changed from 30 to 100</span>
<span class="k">def</span> <span class="nf">clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">username</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'username'</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">password</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">'password'</span><span class="p">)</span>
<span class="k">if</span> <span class="n">username</span> <span class="ow">and</span> <span class="n">password</span><span class="p">:</span>
<span class="c">#modifying clean method</span>
<span class="c">#next 5 lines are added</span>
<span class="k">if</span> <span class="s">'@'</span> <span class="ow">in</span> <span class="n">username</span><span class="p">:</span><span class="c">#checking if email</span>
<span class="k">try</span><span class="p">:</span>
<span class="c">#getting username from the User object for that email</span>
<span class="n">username</span> <span class="o">=</span> <span class="n">User</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">email</span><span class="o">=</span><span class="n">username</span><span class="p">)</span><span class="o">.</span><span class="n">username</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">User</span><span class="o">.</span><span class="n">DoesNotExist</span>
<span class="bp">self</span><span class="o">.</span><span class="n">user_cache</span> <span class="o">=</span> <span class="n">authenticate</span><span class="p">(</span><span class="n">username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span>
<span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">user_cache</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">forms</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s">'invalid_login'</span><span class="p">])</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">user_cache</span><span class="o">.</span><span class="n">is_active</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">forms</span><span class="o">.</span><span class="n">ValidationError</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error_messages</span><span class="p">[</span><span class="s">'inactive'</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_for_test_cookie</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">cleaned_data</span>
</pre>
</div>
<h5>
urls.py</h5>
<div class="monokai">
<pre><span class="n">url</span><span class="p">(</span><span class="s">r'^login/$'</span><span class="p">,</span> <span class="s">'django.contrib.auth.views.login'</span><span class="p">,</span>
<span class="p">{</span><span class="s">'authentication_form'</span><span class="p">:</span><span class="n">MyAuthenticationForm</span> <span class="p">}),</span>
</pre>
</div>
<p>Happy coding.:)</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5083149417336806306.post-11886054785095859262011-12-20T21:55:00.000+05:302011-12-20T22:36:13.983+05:30Google Easter Eggs<p>Google's latest Easter egg '<a href="http://www.google.com/search?q=let+it+snow">Let it snow</a>' made me to search for the past Google Easter eggs and here is some of my findings</p>
<p><a href="http://www.google.com/search?q=do+a+barrel+roll">Do a barell roll</a> : which rotates the page 360°.</p>
<p><a href="http://www.google.com/search?q=tilt">Tilt</a> : which makes the page a little tilted.</p>
<p><a href="http://www.google.com/search?q=ascii%20art">Ascii art</a> : which shows the ascii art of Google logo.</p>
<p><a href="http://www.google.nl/search?q=christmas+lights">Christmas lights</a> : brings X'mas lights.</p>
<p><a href="http://www.google.com/search?q=hanukkah">Hanukkah</a> : shows stars of David.</p>
<p><a href="http://www.google.com/search?hl=en&q=the+loneliest+number">The loneliest number</a> : discovers the loner</p>
<p><a href="http://www.google.com/intl/xx-hacker/">Google</a> for Hackers.</p>
<p><a href="http://www.google.com/intl/xx-pirate/">Google</a> for Pirates.</p>
<p>and here is some i'm feeling lucky fun. Type these words in Google and click i'm feeling lucky.</p>
<p>"Google Gravity"</p>
<p>"Google Sphere"</p>
<p>"who is the cutest"</p>
<p>"find chuck norris"</p>
<p>I know there is still a lot out there but i am just winding up now :)</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5083149417336806306.post-72450640063635091912011-12-18T17:55:00.001+05:302011-12-18T17:56:37.875+05:30About Me<p>It's all about nothing right now. Hopefully i will try to update it soon.<p>Unknownnoreply@blogger.com0