Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import logging
- from django.conf import settings
- from django.db.models.signals import post_save
- from django.dispatch import receiver
- from rest_framework.authtoken.models import Token
- from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
- from django.db import models
- from django.utils.translation import ugettext_lazy as _
- from django.utils import timezone
- from django.core.exceptions import ObjectDoesNotExist
- from apps.core.models import Store
- from django.urls import reverse
- logger = logging.getLogger(__name__)
- class UserManager(BaseUserManager):
- def _create_user(self, email, password, first_name, last_name,
- is_staff, is_superuser, **extra_fields):
- """
- Create and save an User with the given email, password, name and phone number.
- :param email: string
- :param password: string
- :param first_name: string
- :param last_name: string
- :param is_staff: boolean
- :param is_superuser: boolean
- :param extra_fields:
- :return: User
- """
- now = timezone.now()
- email = self.normalize_email(email)
- user = self.model(email=email,
- first_name=first_name,
- last_name=last_name,
- 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_superuser(self, email, first_name='', last_name='',
- password=None, **extra_fields):
- """
- Create a super user.
- :param email: string
- :param first_name: string
- :param last_name: string
- :param password: string
- :param extra_fields:
- :return: User
- """
- return self._create_user(email, password, first_name, last_name,
- is_staff=True, is_superuser=True,
- **extra_fields)
- class User(AbstractBaseUser, PermissionsMixin):
- STATUS_CHOICES = (
- (1, 'active'),
- (2, 'inactive'),
- (3, 'trial'),
- )
- first_name = models.CharField(max_length=50)
- last_name = models.CharField(max_length=50)
- email = models.EmailField(max_length=255, unique=True)
- status = models.IntegerField(choices=STATUS_CHOICES, default=1, db_index=True)
- is_staff = models.BooleanField(_('staff status'), default=False)
- is_superuser = models.BooleanField(_('superuser status'), default=False)
- is_active = models.BooleanField(_('active'), default=True)
- date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
- date_updated = models.DateTimeField(_('date updated'), auto_now=True)
- objects = UserManager()
- USERNAME_FIELD = 'email'
- class Meta:
- db_table = 'users'
- verbose_name = _('user')
- verbose_name_plural = _('users')
- def __str__(self):
- return self.email
- def get_short_name(self):
- return self.first_name
- def get_full_name(self):
- return '%s %s' % (self.first_name, self.last_name,)
- def can_access(self):
- """
- Can this user access the application?
- """
- if self.status == 0:
- return False # Inactive user
- return True
- @property
- def get_store(self):
- try:
- return Store.objects.get(user__id=self.id)
- except ObjectDoesNotExist:
- return None
- # This code is triggered whenever a new user has been created and saved to the database
- @receiver(post_save, sender=settings.AUTH_USER_MODEL)
- def create_auth_token(sender, instance=None, created=False, **kwargs):
- if created:
- Token.objects.create(user=instance)
Add Comment
Please, Sign In to add comment