9. Autenticación y Autorización
Django viene con un sistema de autenticación de usuario robusto que maneja cuentas de usuario, grupos, permisos y sesiones basadas en cookies.
Configuración Básica
Para usar la autenticación predeterminada, incluye django.contrib.auth.urls en tu urls.py.
# urls.py
path("accounts/", include("django.contrib.auth.urls")),
Esto habilita rutas como:
* /accounts/login/
* /accounts/logout/
* /accounts/password_change/
Vistas de Login y Logout
Por defecto, Django busca las plantillas en registration/login.html.
Ejemplo registration/login.html
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Entrar</button>
</form>
Debes configurar hacia dónde redirigir tras el login en settings.py:
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
Registro de Usuarios
Django provee UserCreationForm para crear nuevos usuarios fácilmente.
from django.contrib.auth.forms import UserCreationForm
from django.views.generic import CreateView
class RegistroView(CreateView):
form_class = UserCreationForm
success_url = '/accounts/login/'
template_name = "registration/signup.html"
Restringir Acceso (Autorización)
Para proteger vistas y asegurar que solo usuarios logueados accedan:
En Vistas Basadas en Funciones (FBV)
Usa el decorador @login_required.
from django.contrib.auth.decorators import login_required
@login_required
def mi_vista_protegida(request):
...
En Vistas Basadas en Clases (CBV)
Usa el mixin LoginRequiredMixin.
from django.contrib.auth.mixins import LoginRequiredMixin
class MiVistaProtegida(LoginRequiredMixin, ListView):
...
Acceso en Plantillas
La variable user está disponible automáticamente en los templates.
{% if user.is_authenticated %}
<p>Hola, {{ user.username }}</p>
<form action="{% url 'logout' %}" method="post">{% csrf_token %}<button>Salir</button></form>
{% else %}
<a href="{% url 'login' %}">Entrar</a>
{% endif %}