En este tutorial, aprenderemos cómo implementar la autenticación de usuarios en Django, un framework de desarrollo web en Python. La autenticación de usuarios es un aspecto fundamental en cualquier aplicación web, ya que nos permite controlar el acceso y proteger la información sensible de los usuarios.
La autenticación de usuarios en Django se basa en el concepto de User Model, que nos permite administrar la información de los usuarios, como su nombre de usuario, contraseña y otros datos relacionados. Además, Django proporciona un conjunto de vistas, formularios y middleware para facilitar la implementación de la autenticación.
En este tutorial, utilizaremos Django 3.0 y Python 3.7. Asegúrate de tenerlos instalados en tu entorno de desarrollo antes de comenzar.
En primer lugar, debemos crear un nuevo proyecto de Django y configurar la base de datos. Abre tu terminal y ejecuta los siguientes comandos:
$ django-admin startproject autenticacion
$ cd autenticacion
$ python manage.py migrate
Esto creará un nuevo proyecto llamado "autenticacion" y realizará las migraciones iniciales para configurar la base de datos.
El siguiente paso es definir el modelo de usuario personalizado. Abre el archivo autenticacion/models.py
y agrega el siguiente código:
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
# Agrega los campos adicionales que necesites para tu aplicación
pass
En este ejemplo, estamos creando un modelo de usuario personalizado llamado CustomUser
que hereda de AbstractUser
. Puedes agregar campos adicionales según tus necesidades.
Luego, debemos indicar a Django que utilice este modelo personalizado como modelo de usuario. Abre el archivo autenticacion/settings.py
y agrega la siguiente línea:
AUTH_USER_MODEL = 'autenticacion.CustomUser'
Ahora, crearemos las vistas y templates necesarios para el registro y inicio de sesión de los usuarios.
En la carpeta autenticacion
, crea una carpeta llamada templates
y dentro de ella crea otra carpeta llamada autenticacion
. Luego, crea los siguientes archivos de templates:
registro.html
: Este template contendrá el formulario de registro de nuevos usuarios.inicio_sesion.html
: Este template contendrá el formulario de inicio de sesión.En la carpeta autenticacion
, crea un archivo llamado views.py
y agrega el siguiente código:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from .forms import RegistroForm, InicioSesionForm
def registro(request):
if request.method == 'POST':
form = RegistroForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('inicio')
else:
form = RegistroForm()
return render(request, 'autenticacion/registro.html', {'form': form})
def inicio_sesion(request):
if request.method == 'POST':
form = InicioSesionForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('inicio')
else:
form.add_error(None, 'Usuario o contraseña incorrectos.')
else:
form = InicioSesionForm()
return render(request, 'autenticacion/inicio_sesion.html', {'form': form})
En este código, estamos definiendo dos vistas: registro
y inicio_sesion
. Estas vistas se encargan de procesar los formularios de registro e inicio de sesión, respectivamente. Utilizamos los formularios RegistroForm
e InicioSesionForm
, que crearemos en el próximo paso.
Ahora, crearemos el formulario de registro de usuarios. En la carpeta autenticacion
, crea un archivo llamado forms.py
y agrega el siguiente código:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import CustomUser
class RegistroForm(UserCreationForm):
class Meta:
model = CustomUser
fields = ['username', 'password1', 'password2']
En este código, estamos creando un formulario RegistroForm
que hereda de UserCreationForm
. Este formulario utiliza el modelo de usuario personalizado CustomUser
y muestra los campos de nombre de usuario, contraseña y confirmación de contraseña.
A continuación, crearemos el formulario de inicio de sesión. En el mismo archivo forms.py
, agrega el siguiente código:
from django import forms
class InicioSesionForm(forms.Form):
username = forms.CharField(max_length=150)
password = forms.CharField(widget=forms.PasswordInput)
En este código, estamos creando un formulario InicioSesionForm
que contiene los campos de nombre de usuario y contraseña.
Ahora que hemos configurado la autenticación de usuarios, podemos proteger las vistas que requieren autenticación. Abre el archivo autenticacion/views.py
y agrega el siguiente decorador a la vista que deseas proteger:
from django.contrib.auth.decorators import login_required
@login_required
def vista_protegida(request):
return render(request, 'autenticacion/vista_protegida.html')
En este ejemplo, hemos decorado la vista vista_protegida
con @login_required
, lo que significa que solo los usuarios autenticados podrán acceder a esta vista. Si un usuario no autenticado intenta acceder, será redirigido automáticamente a la página de inicio de sesión.
En este tutorial, hemos aprendido cómo implementar la autenticación de usuarios en Django paso a paso. Hemos creado un modelo de usuario personalizado, formular