"""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' object = 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'] @staticmethod def has_perm(): """Los usuarios siempre tienen permiso""" return True @staticmethod def has_module_perms(): """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}'