Salve galerinhaaaa, Tudo certo com vocês?
O Django é fornecido com um modelo de usuário interno para autenticação, no entanto, a documentação oficial do Django recomenda o uso de um modelo de usuário personalizado para novos projetos. O motivo é que você deseja fazer alterações no modelo de usuário no futuro – por exemplo, adicionando uma data de nascimento – usando um modelo de usuário personalizado desde o início facilita bastante isso. Mas se não, atualizar o modelo de usuário padrão em um projeto existente do Django é muito, muito desafiador.
Portanto, sempre use um modelo de usuário personalizado para todos os novos projetos do Django. No entanto, o exemplo da documentação oficial não é realmente o que muitos especialistas do Django recomendam usar. Existe uma abordagem muito mais fácil, porém poderosa, para iniciar novos projetos do Django com um modelo de usuário personalizado que eu demonstrarei aqui.
Configuração
Para começar, crie um novo projeto Django a partir da linha de comando.
Para isso vamos criar uma pasta chamada customuser, e utilizar o pipenv para isolar todas as dependências do nosso projeto e depois utilizar o django-admin para iniciar nosso projeto django e depois o startapp para iniciar o app Users.
mkdir customuser && cd customuser
pipenv --three
pipenv install django
pipenv shell
django-admin startproject customuser .
python manage.py startapp users
Observe que não executamos migrate para configurar nosso banco de dados. É importante esperar até criarmos nosso novo modelo de usuário personalizado antes de fazê-lo.
AbstractUser vs AbstractBaseUser
Existe duas formas de criar um Usuário Customizado no django, o AbstractUser e o AbstractBaseUser. Em ambos os casos eles auxiliam na criação do Usuário Customizado, porém ao utilizar o AbstractBaseUser você tem que ter em mente que terá muito, más muito trabalho mesmo, já que ele só fornece a subclasse já as funcionalidades você terá que fazer tudo do ZERO, deferente do AbstractUser que ja te trás muitas funcionalidades e campos padrão do Django.
Criando Usuário Customizado
Primeiro vamos adicionar nossa app Users nas settings da aplicação, então ela ficará assim:
# config/settings.py
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"users.apps.UsersConfig", # Novo
]
...
AUTH_USER_MODEL = 'users.CustomUser' # Novo
Agora vamos criar o modelo do usuário customizado
Para nosso exemplo, vou estender o usuário e adicionar o campo UUID.
import uuid
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
# Create your models here.
class CustomUser(AbstractUser):
uuid = models.UUIDField(_("User UUID"), editable=False, default=uuid.uuid4)
@property
def name(self):
return "{} {}".format(self.first_name, self.last_name)
class Meta:
verbose_name = _("user")
verbose_name_plural = _("users")
db_table = "users"
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse("CustomUser_detail", kwargs={"pk": self.pk})
Agora vamos customizar os forms de criação e edição dos usuários do Django.
Para isso, crie um arquivo chamado forms.py dentro da app de users.
# users/forms.py
from django import forms
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = (
"username",
"email",
)
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = "__all__"
Para finalizar, vamos adicionar o Usuário Customizado disponivel no Admin do Django.
# users/admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from .forms import CustomUserChangeForm, CustomUserCreationForm
from .models import CustomUser
# Register your models here.
@admin.register(CustomUser)
class CustomUserAdmin(admin.ModelAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ("email", "name", "is_active")
Agora podemos pegar e criar as migrações e criar a estrutura do banco de dados
python manage.py makemigrations
python manage.py migrate
É útil criar um superusuário que possamos usar para fazer login no administrador e testar o login / logout. Na linha de comandos, digite o seguinte comando e siga as instruções.
python manage.py createsuperuser
Conclusão
Agora que nosso modelo de usuário personalizado está configurado, você pode facilmente e a qualquer momento adicionar campos adicionais a ele. Veja a documentação do Django para mais instruções.
Link para o Repositório com todos os códigos
Comenta ai o que achou da publicação, e comenta tambem se tiver alguma dica de temas para abordar nos próximos posts <3