gault-millau/apps/account/models.py

74 lines
2.1 KiB
Python

from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
from django.db import models
from django.utils.translation import ugettext_lazy as _
from rest_framework.authtoken.models import Token
from utils.models import ImageMixin
class UserManager(BaseUserManager):
"""Extended manager for User model."""
use_in_migrations = False
def make(self, username: str, email: str,
password: str, newsletter: bool) -> object:
"""Register new user"""
obj = self.model(
email=email,
username=username,
password=password,
newsletter=newsletter
)
obj.save()
return obj
class UserQuerySet(models.QuerySet):
"""Extended queryset for User model."""
def active(self, switcher=True):
"""Filter only active users."""
return self.filter(is_active=switcher)
class User(ImageMixin, AbstractUser):
"""Base user model."""
email = models.EmailField(_('email address'), blank=True,
null=True, default=None)
newsletter = models.NullBooleanField(default=True)
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
objects = UserManager.from_queryset(UserQuerySet)()
class Meta:
"""Meta class."""
verbose_name = _('User')
verbose_name_plural = _('Users')
def __str__(self):
"""String method."""
return "%s:%s" % (self.email, self.get_short_name())
def remove_token(self):
Token.objects.filter(user=self).delete()
def remove_access_tokens(self, source):
"""Method to remove user access tokens"""
self.oauth2_provider_accesstoken.filter(application__source=source)\
.delete()
def revoke_refresh_tokens(self, source):
"""Method to remove user refresh tokens"""
refresh_tokens = self.oauth2_provider_refreshtoken.filter(
application__source=source)
for token in refresh_tokens:
token.revoke()
@property
def get_username(self):
"""Get user username"""
return self.username