Guest User

Untitled

a guest
Sep 27th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import logging
  5. from django.conf import settings
  6. from django.db.models.signals import post_save
  7. from django.dispatch import receiver
  8. from rest_framework.authtoken.models import Token
  9. from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
  10. from django.db import models
  11. from django.utils.translation import ugettext_lazy as _
  12. from django.utils import timezone
  13. from django.core.exceptions import ObjectDoesNotExist
  14. from apps.core.models import Store
  15. from django.urls import reverse
  16. logger = logging.getLogger(__name__)
  17.  
  18.  
  19. class UserManager(BaseUserManager):
  20.  
  21. def _create_user(self, email, password, first_name, last_name,
  22. is_staff, is_superuser, **extra_fields):
  23. """
  24. Create and save an User with the given email, password, name and phone number.
  25. :param email: string
  26. :param password: string
  27. :param first_name: string
  28. :param last_name: string
  29. :param is_staff: boolean
  30. :param is_superuser: boolean
  31. :param extra_fields:
  32. :return: User
  33. """
  34. now = timezone.now()
  35. email = self.normalize_email(email)
  36. user = self.model(email=email,
  37. first_name=first_name,
  38. last_name=last_name,
  39. is_staff=is_staff,
  40. is_active=True,
  41. is_superuser=is_superuser,
  42. last_login=now,
  43. date_joined=now, **extra_fields)
  44. user.set_password(password)
  45. user.save(using=self._db)
  46.  
  47. return user
  48.  
  49. def create_superuser(self, email, first_name='', last_name='',
  50. password=None, **extra_fields):
  51. """
  52. Create a super user.
  53. :param email: string
  54. :param first_name: string
  55. :param last_name: string
  56. :param password: string
  57. :param extra_fields:
  58. :return: User
  59. """
  60. return self._create_user(email, password, first_name, last_name,
  61. is_staff=True, is_superuser=True,
  62. **extra_fields)
  63.  
  64.  
  65. class User(AbstractBaseUser, PermissionsMixin):
  66. STATUS_CHOICES = (
  67. (1, 'active'),
  68. (2, 'inactive'),
  69. (3, 'trial'),
  70. )
  71. first_name = models.CharField(max_length=50)
  72. last_name = models.CharField(max_length=50)
  73. email = models.EmailField(max_length=255, unique=True)
  74. status = models.IntegerField(choices=STATUS_CHOICES, default=1, db_index=True)
  75. is_staff = models.BooleanField(_('staff status'), default=False)
  76. is_superuser = models.BooleanField(_('superuser status'), default=False)
  77. is_active = models.BooleanField(_('active'), default=True)
  78. date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
  79. date_updated = models.DateTimeField(_('date updated'), auto_now=True)
  80.  
  81. objects = UserManager()
  82.  
  83. USERNAME_FIELD = 'email'
  84.  
  85. class Meta:
  86. db_table = 'users'
  87. verbose_name = _('user')
  88. verbose_name_plural = _('users')
  89.  
  90. def __str__(self):
  91. return self.email
  92.  
  93. def get_short_name(self):
  94. return self.first_name
  95.  
  96. def get_full_name(self):
  97. return '%s %s' % (self.first_name, self.last_name,)
  98.  
  99. def can_access(self):
  100. """
  101. Can this user access the application?
  102. """
  103. if self.status == 0:
  104. return False # Inactive user
  105. return True
  106.  
  107. @property
  108. def get_store(self):
  109. try:
  110. return Store.objects.get(user__id=self.id)
  111. except ObjectDoesNotExist:
  112. return None
  113.  
  114.  
  115. # This code is triggered whenever a new user has been created and saved to the database
  116. @receiver(post_save, sender=settings.AUTH_USER_MODEL)
  117. def create_auth_token(sender, instance=None, created=False, **kwargs):
  118. if created:
  119. Token.objects.create(user=instance)
Add Comment
Please, Sign In to add comment