Fixed #30236 -- Made UsernameField render with autocapitalize="none" HTML attribute.

This prevents automatic capitalization, which is the default behavior in
some browsers.
This commit is contained in:
pmisteli 2019-03-24 19:53:31 +01:00 committed by Mariusz Felisiak
parent 9aa56cb0d5
commit 9410db9683
2 changed files with 17 additions and 0 deletions

View File

@ -61,6 +61,11 @@ class UsernameField(forms.CharField):
def to_python(self, value): def to_python(self, value):
return unicodedata.normalize('NFKC', super().to_python(value)) return unicodedata.normalize('NFKC', super().to_python(value))
def widget_attrs(self, widget):
attrs = super().widget_attrs(widget)
attrs['autocapitalize'] = 'none'
return attrs
class UserCreationForm(forms.ModelForm): class UserCreationForm(forms.ModelForm):
""" """

View File

@ -261,6 +261,10 @@ class UserCreationFormTest(TestDataMixin, TestCase):
['The password is too similar to the first name.'], ['The password is too similar to the first name.'],
) )
def test_username_field_autocapitalize_none(self):
form = UserCreationForm()
self.assertEqual(form.fields['username'].widget.attrs.get('autocapitalize'), 'none')
# To verify that the login form rejects inactive users, use an authentication # To verify that the login form rejects inactive users, use an authentication
# backend that allows them. # backend that allows them.
@ -439,6 +443,10 @@ class AuthenticationFormTest(TestDataMixin, TestCase):
username_field = User._meta.get_field(User.USERNAME_FIELD) username_field = User._meta.get_field(User.USERNAME_FIELD)
self.assertEqual(form.fields['username'].label, capfirst(username_field.verbose_name)) self.assertEqual(form.fields['username'].label, capfirst(username_field.verbose_name))
def test_username_field_autocapitalize_none(self):
form = AuthenticationForm()
self.assertEqual(form.fields['username'].widget.attrs.get('autocapitalize'), 'none')
def test_username_field_label_empty_string(self): def test_username_field_label_empty_string(self):
class CustomAuthenticationForm(AuthenticationForm): class CustomAuthenticationForm(AuthenticationForm):
@ -728,6 +736,10 @@ class UserChangeFormTest(TestDataMixin, TestCase):
form = UserChangeFormWithoutPassword() form = UserChangeFormWithoutPassword()
self.assertNotIn('password', form.fields) self.assertNotIn('password', form.fields)
def test_username_field_autocapitalize_none(self):
form = UserChangeForm()
self.assertEqual(form.fields['username'].widget.attrs.get('autocapitalize'), 'none')
@override_settings(TEMPLATES=AUTH_TEMPLATES) @override_settings(TEMPLATES=AUTH_TEMPLATES)
class PasswordResetFormTest(TestDataMixin, TestCase): class PasswordResetFormTest(TestDataMixin, TestCase):