Advertisement
Guest User

Untitled

a guest
May 23rd, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.57 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """ User models."""
  3. from django.contrib.auth.models import (
  4. AbstractBaseUser, BaseUserManager, PermissionsMixin)
  5. from django.core.mail import send_mail
  6. from django.db import models
  7. from django.utils import timezone
  8. from django.utils.translation import ugettext_lazy as _
  9. from django.conf import settings
  10.  
  11. from custom_user.utils import hide_email
  12.  
  13. class EmailUserManager(BaseUserManager):
  14.  
  15. """ Custom manager for EmailUser."""
  16.  
  17. def _create_user(self, email, password,
  18. is_staff, is_superuser, **extra_fields):
  19. """ Create and save an EmailUser with the given email and password.
  20.  
  21. :param str email: user email
  22. :param str password: user password
  23. :param bool is_staff: whether user staff or not
  24. :param bool is_superuser: whether user admin or not
  25. :return custom_user.models.EmailUser user: user
  26. :raise ValueError: email is not set
  27.  
  28. """
  29. now = timezone.now()
  30. # if not email:
  31. # raise ValueError('The given email must be set')
  32.  
  33. # For socials have to equal email(if emply seted) None
  34.  
  35. if email:
  36. email = self.normalize_email(email)
  37. else:
  38. email = None
  39.  
  40. is_active = extra_fields.pop("is_active", True)
  41. user = self.model(email=email, is_staff=is_staff, is_active=is_active,
  42. is_superuser=is_superuser, last_login=now,
  43. date_joined=now, **extra_fields)
  44.  
  45. if password:
  46. user.set_password(password)
  47.  
  48. user.save(using=self._db)
  49. return user
  50.  
  51. def create_user(self, email, password=None, **extra_fields):
  52. """ Create and save an EmailUser with the given email and password.
  53.  
  54. :param str email: user email
  55. :param str password: user password
  56. :return custom_user.models.EmailUser user: regular user
  57.  
  58. """
  59. is_staff = extra_fields.pop("is_staff", False)
  60. return self._create_user(email, password, is_staff, False,
  61. **extra_fields)
  62.  
  63. def create_superuser(self, email, password, **extra_fields):
  64. """ Create and save an EmailUser with the given email and password.
  65.  
  66. :param str email: user email
  67. :param str password: user password
  68. :return custom_user.models.EmailUser user: admin user
  69.  
  70. """
  71. return self._create_user(email, password, True, True,
  72. **extra_fields)
  73.  
  74.  
  75. class AbstractEmailUser(AbstractBaseUser, PermissionsMixin):
  76.  
  77. """ Abstract User with the same behaviour as Django's default User.
  78.  
  79. AbstractEmailUser does not have username field. Uses email as the
  80. USERNAME_FIELD for authentication.
  81.  
  82. Use this if you need to extend EmailUser.
  83.  
  84. Inherits from both the AbstractBaseUser and PermissionMixin.
  85.  
  86. The following attributes are inherited from the superclasses:
  87. * password
  88. * last_login
  89. * is_superuser
  90.  
  91. """
  92.  
  93. email = models.EmailField(_('email address'), max_length=255,
  94. unique=True, db_index=True, null=True)
  95. is_staff = models.BooleanField(
  96. _('staff status'), default=False, help_text=_(
  97. 'Designates whether the user can log into this admin site.'))
  98. is_active = models.BooleanField(_('active'), default=True, help_text=_(
  99. 'Designates whether this user should be treated as '
  100. 'active. Unselect this instead of deleting accounts.'))
  101. date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
  102.  
  103. objects = EmailUserManager()
  104.  
  105. USERNAME_FIELD = 'email'
  106. REQUIRED_FIELDS = []
  107.  
  108. class Meta:
  109. verbose_name = _('user')
  110. verbose_name_plural = _('users')
  111. abstract = True
  112.  
  113. def get_full_name(self):
  114. """ Return the email."""
  115. return self.email
  116.  
  117. def get_short_name(self):
  118. """ Return the email."""
  119. return self.email
  120.  
  121. def email_user(self, subject, message, **kwargs):
  122. """ Send an email to this User."""
  123. send_mail(subject, message, getattr(settings, 'EMAIL_HOST_USER'), [self.email], **kwargs)
  124.  
  125.  
  126. class EmailUser(AbstractEmailUser):
  127.  
  128. """
  129. Expand Custom Email user abstraction
  130.  
  131. """
  132.  
  133. GENDER_LIST = (
  134. ('male', _('Male')),
  135. ('female', _('Female')),
  136. )
  137.  
  138. username = models.CharField(_('User name from socials'), max_length=256, blank=True, null=True)
  139. first_name = models.CharField(_('First Name'), max_length=256, blank=True, null=True)
  140. last_name = models.CharField(_('Last Name'), max_length=256, blank=True, null=True)
  141.  
  142. gender = models.CharField(_('Gender'), max_length=10, choices=GENDER_LIST, null=True, blank=True)
  143. birthdate = models.DateField(_('Birthdate'), null=True, blank=True)
  144. # joined = models.DateTimeField(_('Last Name'), default=timezone.now)
  145.  
  146. avatar = models.ImageField(_('Avatar'), upload_to='profiles', blank=True, null=True)
  147.  
  148. def get_full_name(self):
  149. name_list = []
  150. if self.first_name:
  151. name_list.append(self.first_name)
  152. if self.last_name:
  153. name_list.append(self.last_name)
  154.  
  155. if not name_list:
  156. return self.email or self.username
  157.  
  158. else:
  159. return ' '.join(name_list)
  160.  
  161. def get_hidden_name(self):
  162. return hide_email(self.get_full_name())
  163.  
  164. def in_group(self, group_name):
  165. return group_name in self.groups.all().values_list('name', flat=True)
  166.  
  167. def in_copyright_group(self):
  168. return self.in_group('copyright')
  169.  
  170. def __unicode__(self):
  171. return self.get_full_name()
  172.  
  173. class Meta(AbstractEmailUser.Meta):
  174. swappable = 'AUTH_USER_MODEL'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement