#20541: Differenciate user from superuser creation in django.contrib.auth at a
signal level
--------------------------------------+--------------------
Reporter: antonio@… | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: contrib.auth | Version: 1.5
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 1
Easy pickings: 1 | UI/UX: 0
--------------------------------------+--------------------
Hi all,
Currently the steps to create a superuser
(auth.models.User.create_superuser) are:
1) Create user
2) Save User
3) Assign staff, active, superuser
4) Save again
When the first save happens the post_save signal is raised, but the user
is not a superuser yet. The signal will get raised again after a few
lines, which is wasteful. My proposal is to implement superuser creation
like this:
{{{
class UserManager(BaseUserManager):
def create_user(self, username, email=None, password=None, save=True,
**extra_fields):
"""
Creates and saves a User with the given username, email and
password.
"""
now = timezone.now()
if not username:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=False, is_active=True,
is_superuser=False,
last_login=now, date_joined=now, **extra_fields)
user.set_password(password)
if save:
user.save(using=self._db)
return user
def create_superuser(self, username, email, password, **extra_fields):
u = self.create_user(username, email, password, save=False,
**extra_fields)
u.is_staff = True
u.is_active = True
u.is_superuser = True
u.save(using=self._db)
return u
}}}
Now when post_save is fired, one can check is_superuser, is_staff or
is_active and take action based on that.
--
Ticket URL: <https://code.djangoproject.com/ticket/20541>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.008a28ee57abbafb5f92f9ecb688535d%40djangoproject.com?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.