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.