Skip to content

Instantly share code, notes, and snippets.

@pije76
Forked from fandrefh/custom_user.py
Created September 4, 2021 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pije76/3fdc87a879a095ad7ea4f862aa394c42 to your computer and use it in GitHub Desktop.
Save pije76/3fdc87a879a095ad7ea4f862aa394c42 to your computer and use it in GitHub Desktop.
# models.py
class User(AbstractBaseUser, PermissionsMixin):
username_validator = UnicodeUsernameValidator()
id = models.UUIDField(verbose_name=_('ID'), primary_key=True, default=uuid.uuid4, editable=False)
username = models.CharField(
_('Usuário'),
max_length=150,
unique=True,
help_text=_('Obrigatório. 150 caracteres ou menos. Letras, números e os símbolos @/./+/-/_ são permitidos.'),
validators=[username_validator],
error_messages={
'unique': _("Já existe um usuário com este username."),
},
blank=True, null=True
)
full_name = models.CharField(verbose_name=_('Nome'), max_length=150)
address = models.CharField(verbose_name=_('Endereço'), max_length=200, blank=True, default='')
area = models.CharField(verbose_name=_('Bairro'), max_length=50, blank=True, default='')
state = models.CharField(verbose_name=_('Estado'), max_length=2, choices=STATE_CHOICES, blank=True, default='')
city = models.CharField(verbose_name=_('Cidade'), max_length=50, blank=True, default='')
zip_code = models.CharField(verbose_name=_('CEP'), max_length=10, blank=True, default='')
complement = models.CharField(verbose_name=_('Complemento'), max_length=100, blank=True, default='')
cell_phone = models.CharField(verbose_name=_('Celular'), max_length=14, blank=True, default='')
cpf = models.CharField(verbose_name=_('CPF'), max_length=14, blank=True, null=True, unique=True)
rg = models.CharField(verbose_name=_('RG'), max_length=50, blank=True, null=True, unique=True)
birthday = models.DateField(verbose_name=_('Nascimento'), blank=True, null=True)
email = models.EmailField(verbose_name=_('E-mail'), unique=True)
photo = models.ImageField(verbose_name=_('Foto'), upload_to='photos', blank=True, default='')
is_staff = models.BooleanField(verbose_name=_('Staff'), default=False, help_text=_('Pode logar no Admin'))
is_active = models.BooleanField(
verbose_name=_("Ativo"),
default=True,
help_text=_('Desmarque esta opção em vez de deletar o usuário')
)
date_joined = models.DateTimeField(verbose_name=_('Data de cadastro'), default=timezone.now, editable=False)
objects = UserManager()
EMAIL_FIELD = 'email'
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['full_name']
class Meta:
verbose_name = _('Usuário')
verbose_name_plural = _('Usuários')
permissions = [
('jn_can_access_courses', _('Pode acessar os cursos')),
('jn_can_access_articles', _('Pode acessar os artigos')),
('jn_can_access_coaches', _('Pode contratar os Coaches')),
]
swappable = "AUTH_USER_MODEL"
def get_username(self):
return self.username
def get_full_name(self):
return self.full_name
def get_short_name(self):
short_name = self.full_name.split()[0] + ' ' + self.full_name.split()[-1]
return short_name.strip()
def email_user(self, subject, message, from_email=None, **kwargs):
send_mail(subject, message, from_email, [self.email], **kwargs)
@property
def pk(self):
return self.id.urn[9:]
# managers.py
class UserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, username, email, password, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
if not email:
raise ValueError(_('O e-mail é obrigatório'))
if username is None:
username = get_unique_username(email)
email = self.normalize_email(email)
user = self.model(username=username, email=email, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, username=None, **extra_fields):
extra_fields.setdefault('is_superuser', False)
return self._create_user(username=username, email=email, password=password, **extra_fields)
def create_superuser(self, email, password, username=None, **extra_fields):
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_staff', True)
extra_fields.setdefault('is_active', True)
if extra_fields.get('is_superuser') is not True:
raise ValueError(_('Super usuário precisa ter is_superuser=True'))
return self._create_user(username=username, email=email, password=password, **extra_fields)
# views.py
# Essa views foi só para testar a persistência
def add_user(request):
if request.method == 'POST':
form = UserForm(request.POST)
if form.is_valid():
form.save()
form = UserForm()
return render(request, 'add_user.html', {'form': form})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment