Suppose you have a Django app with a login where people can only log in with their email address. Then use this widget on your login form:


## The input widget class
class EmailInput(forms.widgets.Input):
   input_type = 'email'

   def render(self, name, value, attrs=None):
       if attrs is None:
           attrs = {}
       attrs.update(dict(autocorrect='off',
                         autocapitalize='off',
                         spellcheck='false'))
       return super(EmailInput, self).render(name, value, attrs=attrs)

## Example usage
class AuthenticationForm(django.contrib.auth.forms.AuthenticationForm):
   """override the authentication form because we use the email address as the
   key to authentication."""
   # allows for using email to log in
   username = forms.CharField(label="Username", max_length=75,
                              widget=EmailInput())
   rememberme = forms.BooleanField(label="Remember me", required=False)

EmailInput HTML5 friendly for Django This input field does some cool stuff in the browser such as automatic validation in the browser as seen in this screenshot here.

More importantly it fixes a very annoying problem when surfing on a smartphone or a tablet like the iPad. As I'm about to type "someusername@mozilla.com" it first wants to start capitalized and which might fail the login. Also if the email address contains a word that it wants to correct like ("mozilla" -> "Mozilla") you have to click the little correct tooltip to tell the input is correct in verbatim.

Note to Djangonauts who want to use this and have a dual authentication backend that takes both usernames and email addresses, this form will make it impossible to log in as something called "admin" for example.

Comments

Post your own comment
Lucio Correa

Hi.

Kudos for the code, but the example is wrong: it should be:

EmailInput instead of forms.widget.Input, no?

Peter Bengtsson

Thank you so much for the correction! Fixed now.

Aamir Maniar

Hi

This is a nice one, why don't you start writing library of all Html5 friendly input controls? That would be good...

-
http://www.technobits.net

Dom

Please check out this project : django-floppy-forms
there's an ongoing effort to bring this to django core

Peter Bengtsson

I'm keeping a eye on that exciting project.

Sébastien Fievet

@Aamir check also django-html5 : https://github.com/rhec/django-html5

Your email will never ever be published.

Previous:
A blog comment spam solution: Retalition! July 31, 2011 Wondering
Next:
Title - a javascript snippet to control the document title August 22, 2011 JavaScript
Related by category:
How to avoid a count query in Django if you can February 14, 2024 Django
How to have default/initial values in a Django form that is bound and rendered January 10, 2020 Django
My site's now NextJS - And I (almost) regret it already December 17, 2021 Django
How to sort case insensitively with empty strings last in Django April 3, 2022 Django
Related by keyword:
How much faster is Cheerio at parsing depending on xmlMode? December 5, 2022 Node, JavaScript
Fastest way to turn HTML into text in Python January 8, 2021 Python
django-html-validator October 20, 2014 Python, Web development, Django
Difference between $.data('foo') and $.attr('data-foo') in jQuery June 10, 2012 JavaScript