class Migration(migrations.Migration): dependencies = [ ('auth', '0006_require_contenttypes_0002'), ] operations = [ migrations.AlterField( model_name='user', name='username', field=models.CharField( error_messages={ 'unique': 'A user with that username already exists.' }, help_text= 'Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=30, unique=True, validators=[ validators.UnicodeUsernameValidator() if six.PY3 else validators.ASCIIUsernameValidator() ], verbose_name='username', ), ), ]
class Migration(migrations.Migration): dependencies = [ ('email_auth', '0003_django110'), ] operations = [] if VERSION >= (1, 10): from django.contrib.auth import validators from django.utils import six operations.append( migrations.AlterField( model_name='user', name='username', field=models.CharField( error_messages={ 'unique': 'A user with that username already exists.' }, help_text= 'Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[ validators.UnicodeUsernameValidator() if six.PY3 else validators.ASCIIUsernameValidator() ], verbose_name='username'), ))
class Migration(migrations.Migration): dependencies = [ ('auth', '0003_alter_user_email_max_length'), ] # No database changes; modifies validators and error_messages (#13147). operations = [ migrations.AlterField( model_name='user', name='username', field=models.CharField( error_messages={ 'unique': 'A user with that username already exists.' }, max_length=30, validators=[ validators.UnicodeUsernameValidator() if six.PY3 else validators.ASCIIUsernameValidator() ], help_text= 'Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, verbose_name='username'), ), ]
def test_ascii_validator(self): valid_usernames = ['glenn', 'GLEnN', 'jean-marc'] invalid_usernames = ["o'connell", 'Éric', 'jean marc', "أحمد"] v = validators.ASCIIUsernameValidator() for valid in valid_usernames: v(valid) for invalid in invalid_usernames: with self.assertRaises(ValidationError): v(invalid)
def test_ascii_validator(self): valid_usernames = ["glenn", "GLEnN", "jean-marc"] invalid_usernames = [ "o'connell", "Éric", "jean marc", "أحمد", "trailingnewline\n", ] v = validators.ASCIIUsernameValidator() for valid in valid_usernames: with self.subTest(valid=valid): v(valid) for invalid in invalid_usernames: with self.subTest(invalid=invalid): with self.assertRaises(ValidationError): v(invalid)
class LoginForm(forms.Form): login_username = forms.CharField( max_length=32, min_length=3, required=True, strip=False, validators=[validators.ASCIIUsernameValidator()], widget=forms.TextInput({ "placeholder": "Username", "aria-label": "Username", "class": "form-control" }), label="Username") login_password = forms.CharField( strip=False, required=True, label="Password", widget=forms.PasswordInput({ "placeholder": "Password", "aria-label": "Password", "class": "form-control" }), )
class Migration(migrations.Migration): dependencies = [ ('contenttypes', '__first__'), ] operations = [ migrations.CreateModel( name='Permission', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(max_length=50, verbose_name='name')), ('content_type', models.ForeignKey( to='contenttypes.ContentType', on_delete=models.CASCADE, to_field='id', verbose_name='content type', )), ('codename', models.CharField(max_length=100, verbose_name='codename')), ], options={ 'ordering': ('content_type__app_label', 'content_type__model', 'codename'), 'unique_together': set([('content_type', 'codename')]), 'verbose_name': 'permission', 'verbose_name_plural': 'permissions', }, managers=[ ('objects', django.contrib.auth.models.PermissionManager()), ], ), migrations.CreateModel( name='Group', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('name', models.CharField(unique=True, max_length=80, verbose_name='name')), ('permissions', models.ManyToManyField(to='auth.Permission', verbose_name='permissions', blank=True)), ], options={ 'verbose_name': 'group', 'verbose_name_plural': 'groups', }, managers=[ ('objects', django.contrib.auth.models.GroupManager()), ], ), migrations.CreateModel( name='User', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('password', models.CharField(max_length=128, verbose_name='password')), ('last_login', models.DateTimeField(default=timezone.now, verbose_name='last login')), ('is_superuser', models.BooleanField( default=False, help_text= 'Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), ('username', models.CharField( help_text= 'Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, max_length=30, verbose_name='username', validators=[ validators.UnicodeUsernameValidator() if six.PY3 else validators.ASCIIUsernameValidator() ], )), ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)), ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)), ('email', models.EmailField(max_length=75, verbose_name='email address', blank=True)), ('is_staff', models.BooleanField( default=False, help_text= 'Designates whether the user can log into this admin site.', verbose_name='staff status')), ('is_active', models.BooleanField( default=True, verbose_name='active', help_text= ('Designates whether this user should be treated as active. Unselect this instead of deleting ' 'accounts.'))), ('date_joined', models.DateTimeField(default=timezone.now, verbose_name='date joined')), ('groups', models.ManyToManyField( to='auth.Group', verbose_name='groups', blank=True, related_name='user_set', related_query_name='user', help_text= ('The groups this user belongs to. A user will get all permissions granted to each of their ' 'groups.'))), ('user_permissions', models.ManyToManyField( to='auth.Permission', verbose_name='user permissions', blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user')), ], options={ 'swappable': 'AUTH_USER_MODEL', 'verbose_name': 'user', 'verbose_name_plural': 'users', }, managers=[ ('objects', django.contrib.auth.models.UserManager()), ], ), ]
class RegisterForm(forms.Form): register_username = forms.CharField( max_length=32, min_length=3, required=True, strip=False, validators=[validators.ASCIIUsernameValidator()], widget=forms.TextInput({ "placeholder": "Username", "aria-label": "Username", "class": "form-control" }), label="Username") register_first_name = forms.CharField( max_length=32, min_length=3, strip=False, validators=[validators.UnicodeUsernameValidator()], widget=forms.TextInput({ "placeholder": "Name", "aria-label": "Name", "class": "form-control" }), label="Name", required=False, ) register_last_name = forms.CharField( max_length=32, min_length=3, strip=False, validators=[validators.UnicodeUsernameValidator()], label="Last Name", widget=forms.TextInput({ "placeholder": "LastName", "aria-label": "LastName", "class": "form-control" }), required=False, ) register_email = forms.EmailField( required=True, validators=[validators.validators.validate_email], label="Email", widget=forms.EmailInput({ "placeholder": "Email", "aria-label": "Email", "class": "form-control" }), ) register_password = forms.CharField( strip=False, required=True, validators=map(make_validator_callable, get_default_password_validators()), label="Password", widget=forms.PasswordInput({ "placeholder": "Password", "aria-label": "Password", "class": "form-control" }), ) register_repeat_password = forms.CharField( strip=False, required=True, label="Repeat Password", widget=forms.PasswordInput( { "placeholder": "Repeat Password", "aria-label": "Repeat Password", "class": "form-control" }, ), ) def clean(self): tmp = super().clean() try: pass1 = tmp.get("register_password") pass2 = tmp.get("register_repeat_password") if pass1 != pass2: self.add_error("register_repeat_password", "Passwords does not match") except TypeError: pass try: if User.objects.get(username=tmp.get("register_username")): self.add_error("register_username", "User already exists") except User.DoesNotExist: pass return tmp