Django proporciona un sistema de autenticación robusto que permite gestionar usuarios, permisos, autenticación y autorización de manera sencilla. Este sistema incluye funcionalidades como inicio de sesión, cierre de sesión, registro de usuarios, y control de permisos para vistas y acciones específicas.
El sistema de autenticación (auth) en Django gestiona la identificación de usuarios y el control de acceso a diferentes partes de una aplicación web. Incluye:
1. Inicio y cierre de sesión.
2. Registro de nuevos usuarios.
3. Permisos y grupos de usuarios para restringir el acceso a ciertas vistas o acciones.
4. Autenticación basada en cookies para mantener la sesión de los usuarios.
El sistema de autenticación viene integrado por defecto en Django y se habilita automáticamente si django.contrib.auth
está incluido en la lista INSTALLED_APPS
dentro de settings.py
.
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
# otras apps
]
Además, se recomienda que AuthenticationMiddleware
esté en la configuración de MIDDLEWARE
, lo cual gestiona la sesión del usuario y agrega el objeto request.user
.
Django incluye vistas y formularios listos para manejar el inicio de sesión de usuarios.
Ejemplo de vista para el login:
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('inicio')
else:
# Usuario no autenticado
return render(request, 'login.html', {'error': 'Credenciales incorrectas'})
return render(request, 'login.html')
Para cerrar la sesión de un usuario autenticado, puedes utilizar la función logout()
de Django.
Ejemplo de cierre de sesión:
from django.contrib.auth import logout
from django.shortcuts import redirect
def logout_view(request):
logout(request)
return redirect('login')
Para registrar un nuevo usuario, puedes usar el modelo User
que viene con Django, junto con un formulario para capturar los datos.
Ejemplo de vista para registrar un usuario:
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from django.contrib.auth import login
def registro_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
email = request.POST['email']
# Crear usuario
user = User.objects.create_user(username=username, password=password, email=email)
login(request, user) # Autenticar después de registrar
return redirect('inicio')
return render(request, 'registro.html')
Django proporciona el decorador @login_required
para restringir el acceso a una vista a solo usuarios autenticados.
Ejemplo:
from django.contrib.auth.decorators import login_required
@login_required
def vista_protegida(request):
return render(request, 'protegida.html')
También puedes usar permisos para limitar el acceso basado en roles de usuario o permisos específicos con el decorador @permission_required
.
En vistas basadas en clases, puedes restringir el acceso mediante LoginRequiredMixin
.
Ejemplo:
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView
class VistaProtegida(LoginRequiredMixin, TemplateView):
template_name = 'protegida.html'
Django permite crear grupos y asignar permisos a grupos o usuarios individuales. Los grupos son útiles para gestionar roles y permisos en grandes aplicaciones.
1. Crear y asignar permisos a un grupo:
from django.contrib.auth.models import Group, Permission
# Crear un grupo
grupo_administradores = Group.objects.create(name='Administradores')
# Asignar permisos al grupo
permiso = Permission.objects.get(codename='add_user')
grupo_administradores.permissions.add(permiso)
2. Asignar usuarios a un grupo:
user = User.objects.get(username='juan')
grupo = Group.objects.get(name='Administradores')
user.groups.add(grupo)
1. Login básico con Django:
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('inicio')
else:
return render(request, 'login.html', {'error': 'Credenciales inválidas'})
return render(request, 'login.html')
2. Protección de vista usando decorador @login_required
:
from django.contrib.auth.decorators import login_required
@login_required
def perfil_view(request):
return render(request, 'perfil.html')
Para más detalles sobre el sistema de autenticación en Django, puedes consultar la documentación oficial de Django.
Jorge García
Fullstack developer