Files
musiclist-server/users/models.py
2020-06-27 14:58:55 -04:00

98 lines
3.2 KiB
Python

"""Definicion de modelos de usuario"""
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.db import models
class UserManager(BaseUserManager):
"""Manager de usuarios, otorga la posibilidad de crear usuarios"""
def create_user(self, username, email, password):
"""Crea un usuario"""
if not username:
raise ValueError('El usuario debe tener un nombre de usuario')
if not email:
raise ValueError('El usuario debe tener un email')
if not password:
raise ValueError('El usuario debe tener una contraseña')
user = self.model(
username=self.model.normalize_username(username),
email=self.normalize_email(email),
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, email, password=None):
"""Crea un super usuario"""
user = self.create_user(
username=username,
email=email,
password=password,
)
user.is_admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
"""Definición del modelo de usuario de la aplicación"""
class Meta:
verbose_name = 'usuario'
verbose_name_plural = 'usuarios'
objects = UserManager()
username_validator = UnicodeUsernameValidator()
username = models.CharField('nombre de usuario', max_length=40,
validators=[username_validator], unique=True)
email = models.EmailField('correo')
is_active = models.BooleanField('esta activo', default=True)
is_admin = models.BooleanField('es administrador', default=False)
password = models.CharField('contraseña', max_length=128)
USERNAME_FIELD = 'username'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = ['email']
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
social_networks = SocialNetworks(user=self)
social_networks.save()
@staticmethod
def has_perm(*args, **kwargs):
"""Los usuarios siempre tienen permiso"""
return True
@staticmethod
def has_module_perms(*args, **kwargs):
"""Los usuarios siempre tienen permiso"""
return True
@property
def is_staff(self):
"""Ser staff es equivalente a ser administrador"""
return self.is_admin
class SocialNetworks(models.Model):
"""Definición de las redes sociales de un usuario"""
class Meta:
verbose_name = 'Redes Sociales'
verbose_name_plural = 'Redes Sociales'
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
twitter = models.CharField('twitter', max_length=255, blank=True)
facebook = models.CharField('facebook', max_length=255, blank=True)
instagram = models.CharField('instagram', max_length=255, blank=True)
youtube = models.CharField('youtube', max_length=255, blank=True)
twitch = models.CharField('twitch', max_length=255, blank=True)
def __str__(self):
return f'{self._meta.verbose_name_plural} de {self.user.username}'