Implementando Autenticação e Autorização de Usuário no Django

A autenticação do usuário garante que os usuários possam efetuar login e acessar suas contas com segurança. A autorização, por outro lado, determina quais ações os usuários autenticados têm permissão para executar. O Django fornece um sistema de autenticação robusto que é fácil de integrar e estender para esses propósitos.

Configurando o sistema de autenticação padrão

O sistema de autenticação padrão do Django está incluído em sua configuração por padrão. Certifique-se de que os seguintes aplicativos estejam listados na seção INSTALLED_APPS do seu settings.py:

'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',

Migre o banco de dados para configurar as tabelas necessárias:

python manage.py migrate

Criando um modelo de usuário

O Django fornece um modelo de usuário integrado, mas você pode criar um personalizado, se necessário. Para usar o modelo padrão:

from django.contrib.auth.models import User

# Creating a new user
user = User.objects.create_user(username='johndoe', password='securepassword')
user.email = 'johndoe@example.com'
user.save()

Para criar um modelo de usuário personalizado, modifique seu models.py:

from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    phone_number = models.CharField(max_length=15, blank=True, null=True)

Atualize a configuração AUTH_USER_MODEL em settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Manipulando login e logout do usuário

O Django fornece visualizações integradas para login e logout. Adicione as seguintes URLs ao seu urls.py:

from django.urls import path
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
]

Crie um modelo de login simples chamado registration/login.html:

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Log in</button>
</form>

Restringindo acesso com permissões

O Django fornece classes de permissão para restringir o acesso. Para usá-las em views:

from django.contrib.auth.decorators import login_required, permission_required

@login_required
def dashboard(request):
    return render(request, 'dashboard.html')

@permission_required('yourapp.can_edit')
def edit_page(request):
    return render(request, 'edit_page.html')

As permissões podem ser atribuídas usando o administrador do Django ou através do shell:

from django.contrib.auth.models import User, Permission

user = User.objects.get(username='johndoe')
permission = Permission.objects.get(codename='can_edit')
user.user_permissions.add(permission)

Conclusão

O sistema de autenticação e autorização do Django fornece uma base sólida para proteger seus aplicativos web. Ele é altamente personalizável, permitindo que você estenda sua funcionalidade para atender a requisitos específicos. Com esse sistema, você pode gerenciar facilmente contas de usuários, funções e permissões em seus projetos.