98 lines
3.2 KiB
Python
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}'
|