Created
October 8, 2016 13:30
-
-
Save comalex/6be9730588ab074745352bbf4c5772b7 to your computer and use it in GitHub Desktop.
Django user
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class CustomUserManager(BaseUserManager): | |
def _create_user(self, email, password, | |
is_staff, is_superuser, **extra_fields): | |
""" | |
Creates and saves a User with the given email and password. | |
""" | |
now = timezone.now() | |
if not email: | |
raise ValueError('The given email must be set') | |
email = self.normalize_email(email) | |
user = self.model(email=email, | |
is_staff=is_staff, is_active=True, | |
is_superuser=is_superuser, last_login=now, | |
date_joined=now, **extra_fields) | |
user.set_password(password) | |
user.save(using=self._db) | |
return user | |
def create_user(self, email, password=None, **extra_fields): | |
return self._create_user(email, password, False, False, | |
**extra_fields) | |
def create_superuser(self, email, password, **extra_fields): | |
return self._create_user(email, password, True, True, | |
**extra_fields) | |
class CustomUser(AbstractBaseUser, PermissionsMixin): | |
username = models.CharField( | |
_('username'), | |
max_length=30, | |
unique=True, | |
help_text=_('Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.'), | |
validators=[ | |
validators.RegexValidator( | |
r'^[\w.@+-]+$', | |
_('Enter a valid username. This value may contain only ' | |
'letters, numbers ' 'and @/./+/-/_ characters.') | |
), | |
], | |
error_messages={ | |
'unique': _("A user with that username already exists."), | |
}, | |
) | |
first_name = models.CharField(_('first name'), max_length=30, blank=True) | |
last_name = models.CharField(_('last name'), max_length=30, blank=True) | |
email = models.EmailField(_('email address'), blank=True) | |
is_staff = models.BooleanField(_('staff status'), default=False, | |
help_text=_('Designates whether the user can log into this admin site.')) | |
is_active = models.BooleanField(_('active'), default=True, | |
help_text=_('Designates whether this user should be treated as ' | |
'active. Unselect this instead of deleting accounts.')) | |
date_joined = models.DateTimeField(_('date joined'), default=timezone.now) | |
objects = CustomUserManager() | |
USERNAME_FIELD = 'username' | |
REQUIRED_FIELDS = [] | |
class Meta: | |
verbose_name = _('user') | |
verbose_name_plural = _('users') | |
def get_absolute_url(self): | |
return "/users/%s/" % urlquote(self.email) | |
def get_full_name(self): | |
""" | |
Returns the first_name plus the last_name, with a space in between. | |
""" | |
full_name = '%s %s' % (self.first_name, self.last_name) | |
return full_name.strip() | |
def get_short_name(self): | |
""" | |
Returns the short name for the user. | |
""" | |
return self.first_name | |
def email_user(self, subject, message, from_email=None): | |
""" | |
Sends an email to this User. | |
""" | |
send_mail(subject, message, from_email, [self.email]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment