mirror of
https://github.com/adrigongv23/G26---Telemetry-Software.git
synced 2026-08-25 19:43:16 +02:00
Gestión usuarios añadida
This commit is contained in:
parent
319a95cc91
commit
97d38a086c
8 changed files with 284 additions and 3 deletions
7
Plataform_Web/users/decorators.py
Normal file
7
Plataform_Web/users/decorators.py
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
from django.contrib.auth.decorators import login_required, user_passes_test
|
||||
|
||||
|
||||
def require_rol(*roles):
|
||||
def decorator(view_func):
|
||||
return login_required(user_passes_test(lambda u: u.rol in roles)(view_func))
|
||||
return decorator
|
||||
|
|
@ -18,3 +18,25 @@ class PerfilForm(forms.ModelForm):
|
|||
'last_name': 'Apellidos',
|
||||
'email': 'Correo electrónico',
|
||||
}
|
||||
|
||||
|
||||
class EditarUsuarioForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = CustomUser
|
||||
fields = ['username', 'first_name', 'last_name', 'email', 'rol', 'especialidad']
|
||||
widgets = {
|
||||
'username': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'first_name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'last_name': forms.TextInput(attrs={'class': 'form-control'}),
|
||||
'email': forms.EmailInput(attrs={'class': 'form-control'}),
|
||||
'rol': forms.Select(attrs={'class': 'form-select'}),
|
||||
'especialidad': forms.Select(attrs={'class': 'form-select'}),
|
||||
}
|
||||
labels = {
|
||||
'username': 'Usuario',
|
||||
'first_name': 'Nombre',
|
||||
'last_name': 'Apellidos',
|
||||
'email': 'Correo electrónico',
|
||||
'rol': 'Rol en el equipo',
|
||||
'especialidad': 'Área técnica',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
from django.shortcuts import render, redirect
|
||||
from django.shortcuts import render, redirect, get_object_or_404
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.forms import PasswordChangeForm
|
||||
from django.contrib.auth import update_session_auth_hash
|
||||
from django.contrib import messages
|
||||
from .forms import PerfilForm
|
||||
from django.views.decorators.http import require_POST
|
||||
from .decorators import require_rol
|
||||
from .forms import PerfilForm, EditarUsuarioForm
|
||||
from .models import CustomUser
|
||||
|
||||
|
||||
|
|
@ -64,3 +66,54 @@ def listado_miembros(request):
|
|||
'filtro_apellido': apellido,
|
||||
}
|
||||
return render(request, 'listado_miembros.html', context)
|
||||
|
||||
|
||||
@require_rol('directiva')
|
||||
def gestion_usuarios(request):
|
||||
usuarios = CustomUser.objects.all().order_by('last_name', 'first_name')
|
||||
|
||||
rol = request.GET.get('rol', '')
|
||||
especialidad = request.GET.get('especialidad', '')
|
||||
apellido = request.GET.get('apellido', '')
|
||||
|
||||
if rol:
|
||||
usuarios = usuarios.filter(rol=rol)
|
||||
if especialidad:
|
||||
usuarios = usuarios.filter(especialidad=especialidad)
|
||||
if apellido:
|
||||
usuarios = usuarios.filter(last_name__icontains=apellido)
|
||||
|
||||
context = {
|
||||
'usuarios': usuarios,
|
||||
'rol_choices': CustomUser.ROL_CHOICES,
|
||||
'especialidad_choices': CustomUser.ESPECIALIDAD_CHOICES,
|
||||
'filtro_rol': rol,
|
||||
'filtro_especialidad': especialidad,
|
||||
'filtro_apellido': apellido,
|
||||
}
|
||||
return render(request, 'gestion_usuarios.html', context)
|
||||
|
||||
|
||||
@require_rol('directiva')
|
||||
def editar_usuario(request, pk):
|
||||
usuario = get_object_or_404(CustomUser, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = EditarUsuarioForm(request.POST, instance=usuario)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
messages.success(request, 'El usuario se ha actualizado correctamente.')
|
||||
return redirect('gestion_usuarios')
|
||||
else:
|
||||
form = EditarUsuarioForm(instance=usuario)
|
||||
|
||||
return render(request, 'editar_usuario.html', {'form': form, 'usuario': usuario})
|
||||
|
||||
|
||||
@require_rol('directiva')
|
||||
@require_POST
|
||||
def eliminar_usuario(request, pk):
|
||||
usuario = get_object_or_404(CustomUser, pk=pk)
|
||||
usuario.delete()
|
||||
messages.success(request, 'El usuario se ha eliminado correctamente.')
|
||||
return redirect('gestion_usuarios')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue