# Path: authemail/models.py
# class EmailAbstractUser(AbstractBaseUser, PermissionsMixin):
#     """
#     An abstract base class implementing a fully featured User model with
#     admin-compliant permissions.
# 
#     Email and password are required. Other fields are optional.
#     """
#     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'), max_length=255, unique=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)
# 
#     is_verified = models.BooleanField(
#         _('verified'), default=False,
#         help_text=_('Designates whether this user has completed the email '
#                     'verification process to allow login.'))
# 
#     USERNAME_FIELD = 'email'
#     REQUIRED_FIELDS = ['first_name', 'last_name']
# 
#     class Meta:
#         verbose_name = _('user')
#         verbose_name_plural = _('users')
#         abstract = True
# 
#     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, **kwargs):
#         """
#         Sends an email to this User.
#         """
#         send_mail(subject, message, from_email, [self.email], **kwargs)
# 
#     def __str__(self):
#         return self.email
# 
# class EmailUserManager(BaseUserManager):
#     def _create_user(self, email, password, is_staff, is_superuser,
#                      is_verified, **extra_fields):
#         """
#         Creates and saves a User with a given email and password.
#         """
#         now = timezone.now()
#         if not email:
#             raise ValueError('Users must have an email address')
#         email = self.normalize_email(email)
#         user = self.model(email=email,
#                           is_staff=is_staff, is_active=True,
#                           is_superuser=is_superuser, is_verified=is_verified,
#                           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, False,
#                                  **extra_fields)
# 
#     def create_superuser(self, email, password, **extra_fields):
#         return self._create_user(email, password, True, True, True,
#                                  **extra_fields)


from django.db import models
from django.utils.translation import ugettext_lazy as _
from authemail.models import EmailAbstractUser, EmailUserManager



class MyUser(EmailAbstractUser):
    # Custom fields
    date_of_birth = models.DateField(_('Date of birth'), null=True, blank=True)

    # Required
    objects = EmailUserManager()



# Path: authemail/models.py
# class EmailAbstractUser(AbstractBaseUser, PermissionsMixin):
#     """
#     An abstract base class implementing a fully featured User model with
#     admin-compliant permissions.
# 
#     Email and password are required. Other fields are optional.
#     """
#     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'), max_length=255, unique=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)
# 
#     is_verified = models.BooleanField(
#         _('verified'), default=False,
#         help_text=_('Designates whether this user has completed the email '
#                     'verification process to allow login.'))
# 
#     USERNAME_FIELD = 'email'
#     REQUIRED_FIELDS = ['first_name', 'last_name']
# 
#     class Meta:
#         verbose_name = _('user')
#         verbose_name_plural = _('users')
#         abstract = True
# 
#     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, **kwargs):
#         """
#         Sends an email to this User.
#         """
#         send_mail(subject, message, from_email, [self.email], **kwargs)
# 
#     def __str__(self):
#         return self.email
# 
# class EmailUserManager(BaseUserManager):
#     def _create_user(self, email, password, is_staff, is_superuser,
#                      is_verified, **extra_fields):
#         """
#         Creates and saves a User with a given email and password.
#         """
#         now = timezone.now()
#         if not email:
#             raise ValueError('Users must have an email address')
#         email = self.normalize_email(email)
#         user = self.model(email=email,
#                           is_staff=is_staff, is_active=True,
#                           is_superuser=is_superuser, is_verified=is_verified,
#                           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, False,
#                                  **extra_fields)
# 
#     def create_superuser(self, email, password, **extra_fields):
#         return self._create_user(email, password, True, True, True,
#                                  **extra_fields)


# Path: example_project/accounts/models.py
from django.db import models
from django.utils.translation import ugettext_lazy as _
from authemail.models import EmailAbstractUser, EmailUserManager




class MyUser(EmailAbstractUser):
    # Custom fields
    date_of_birth = models.DateField(_('Date of birth'), null=True, blank=True)

    # Required
    objects = EmailUserManager()



class VerifiedUserManager(EmailUserManager):