Implementación de autenticación y autorización de usuarios en Django

La autenticación de usuarios garantiza que estos puedan iniciar sesión y acceder a sus cuentas de forma segura. La autorización, por otro lado, determina qué acciones pueden realizar los usuarios autenticados. Django ofrece un sistema de autenticación sólido que es fácil de integrar y ampliar para estos fines.

Configuración del sistema de autenticación predeterminado

El sistema de autenticación predeterminado de Django está incluido en su configuración de forma predeterminada. Asegúrese de que las siguientes aplicaciones estén incluidas en la sección INSTALLED_APPS de su settings.py:

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

Migrar la base de datos para configurar las tablas necesarias:

python manage.py migrate

Creación de un modelo de usuario

Django ofrece un modelo de usuario integrado, pero puedes crear uno personalizado si es necesario. Para utilizar el modelo predeterminado:

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 crear un modelo de usuario personalizado, modifique su 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)

Actualice la configuración AUTH_USER_MODEL en settings.py:

AUTH_USER_MODEL = 'yourapp.CustomUser'

Manejo del inicio y cierre de sesión de usuarios

Django ofrece vistas integradas para iniciar y cerrar sesión. Agregue las siguientes URL a su archivo 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'),
]

Cree una plantilla de inicio de sesión simple llamada registration/login.html:

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

Restringir el acceso con permisos

Django ofrece clases de permisos para restringir el acceso. Para utilizarlas en las vistas:

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')

Los permisos se pueden asignar mediante el administrador de Django o a través del 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)

Conclusión

El sistema de autenticación y autorización de Django proporciona una base sólida para proteger sus aplicaciones web. Es altamente personalizable, lo que le permite ampliar su funcionalidad para cumplir con requisitos específicos. Con este sistema, puede administrar fácilmente las cuentas de usuario, los roles y los permisos en sus proyectos.