Spaces:
Sleeping
Sleeping
Se establece el inicio de sesion del Presentador
Browse files- cata_system/settings.py +2 -1
- cata_system/views.py +1 -1
- tecnicas/decorators/__init__.py +1 -0
- tecnicas/decorators/required_presenter.py +15 -0
- tecnicas/middlewares/__init__.py +2 -1
- tecnicas/middlewares/login_tester_middleware.py +0 -25
- tecnicas/middlewares/presenter_middleware.py +18 -0
- tecnicas/middlewares/tester_middleware.py +47 -0
- tecnicas/migrations/0020_remove_catador_apellido_remove_catador_correo_and_more.py +93 -0
- tecnicas/models/catador.py +12 -7
- tecnicas/models/presentador.py +7 -5
- tecnicas/templates/tecnicas/auth.html +14 -7
- tecnicas/urls.py +19 -19
- tecnicas/views/autentication.py +28 -3
- tecnicas/views/main_panel.py +0 -1
cata_system/settings.py
CHANGED
|
@@ -68,7 +68,8 @@ MIDDLEWARE = [
|
|
| 68 |
'django.contrib.messages.middleware.MessageMiddleware',
|
| 69 |
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
| 70 |
|
| 71 |
-
'tecnicas.middlewares.
|
|
|
|
| 72 |
]
|
| 73 |
|
| 74 |
if DEBUG:
|
|
|
|
| 68 |
'django.contrib.messages.middleware.MessageMiddleware',
|
| 69 |
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
| 70 |
|
| 71 |
+
'tecnicas.middlewares.PresenterAccessMiddleware',
|
| 72 |
+
'tecnicas.middlewares.TesterAccessMiddleware',
|
| 73 |
]
|
| 74 |
|
| 75 |
if DEBUG:
|
cata_system/views.py
CHANGED
|
@@ -2,4 +2,4 @@ from django.http import HttpRequest
|
|
| 2 |
from django.shortcuts import redirect
|
| 3 |
|
| 4 |
def home(req: HttpRequest):
|
| 5 |
-
return redirect('/cata/')
|
|
|
|
| 2 |
from django.shortcuts import redirect
|
| 3 |
|
| 4 |
def home(req: HttpRequest):
|
| 5 |
+
return redirect('/cata/presenter/')
|
tecnicas/decorators/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
from .required_presenter import required_presenter
|
tecnicas/decorators/required_presenter.py
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from django.shortcuts import redirect
|
| 2 |
+
from django.urls import reverse
|
| 3 |
+
from django.core.exceptions import PermissionDenied
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
def required_presenter(view_func):
|
| 7 |
+
def wrapper(request, *args, **kwargs):
|
| 8 |
+
if not request.user.is_authenticated:
|
| 9 |
+
return redirect("cata_system:autenticacion")
|
| 10 |
+
|
| 11 |
+
if not hasattr(request.user, "presentador"):
|
| 12 |
+
raise PermissionDenied(
|
| 13 |
+
"Solo los presentadores pueden acceder a esta vista")
|
| 14 |
+
return view_func(request, *args, **kwargs)
|
| 15 |
+
return wrapper
|
tecnicas/middlewares/__init__.py
CHANGED
|
@@ -1 +1,2 @@
|
|
| 1 |
-
from .
|
|
|
|
|
|
| 1 |
+
from .tester_middleware import TesterAccessMiddleware
|
| 2 |
+
from .presenter_middleware import PresenterAccessMiddleware
|
tecnicas/middlewares/login_tester_middleware.py
DELETED
|
@@ -1,25 +0,0 @@
|
|
| 1 |
-
from django.http import HttpRequest
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
class LoginTesterMiddleware():
|
| 5 |
-
def __init__(self, get_response):
|
| 6 |
-
self.get_response = get_response
|
| 7 |
-
|
| 8 |
-
def __call__(self, req: HttpRequest):
|
| 9 |
-
base_url_protected = "/cata/testers/"
|
| 10 |
-
|
| 11 |
-
if req.path.startswith(base_url_protected):
|
| 12 |
-
if not "cata_username" in req.session:
|
| 13 |
-
id_participacion = req.COOKIES.get("id_participacion")
|
| 14 |
-
if id_participacion:
|
| 15 |
-
from tecnicas.controllers import ParticipacionController
|
| 16 |
-
ParticipacionController.outSession(id_participacion)
|
| 17 |
-
from django.shortcuts import redirect
|
| 18 |
-
from django.urls import reverse
|
| 19 |
-
response = redirect(reverse("cata_system:catador_login"))
|
| 20 |
-
response.delete_cookie("id_participacion")
|
| 21 |
-
return response
|
| 22 |
-
|
| 23 |
-
response = self.get_response(req)
|
| 24 |
-
|
| 25 |
-
return response
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tecnicas/middlewares/presenter_middleware.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from django.core.exceptions import PermissionDenied
|
| 2 |
+
|
| 3 |
+
class PresenterAccessMiddleware:
|
| 4 |
+
def __init__(self, get_response):
|
| 5 |
+
self.get_response = get_response
|
| 6 |
+
|
| 7 |
+
def __call__(self, request):
|
| 8 |
+
path = request.path_info
|
| 9 |
+
|
| 10 |
+
if path.startswith('/cata/presenter/'):
|
| 11 |
+
if not request.user.is_authenticated:
|
| 12 |
+
from django.shortcuts import redirect
|
| 13 |
+
return redirect("cata_system:autenticacion")
|
| 14 |
+
|
| 15 |
+
if not hasattr(request.user, 'user_presentador'):
|
| 16 |
+
raise PermissionDenied("Solo los Presentadores pueden acceder a esta sección.")
|
| 17 |
+
|
| 18 |
+
return self.get_response(request)
|
tecnicas/middlewares/tester_middleware.py
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# usuarios/middleware/catador_middleware.py
|
| 2 |
+
from django.core.exceptions import PermissionDenied
|
| 3 |
+
|
| 4 |
+
|
| 5 |
+
class TesterAccessMiddleware:
|
| 6 |
+
def __init__(self, get_response):
|
| 7 |
+
self.get_response = get_response
|
| 8 |
+
|
| 9 |
+
def __call__(self, request):
|
| 10 |
+
path = request.path_info
|
| 11 |
+
|
| 12 |
+
if path.startswith('/cata/tester/'):
|
| 13 |
+
if not request.user.is_authenticated:
|
| 14 |
+
from django.shortcuts import redirect
|
| 15 |
+
return redirect("cata_system:catador_login")
|
| 16 |
+
|
| 17 |
+
if not hasattr(request.user, 'catador'):
|
| 18 |
+
raise PermissionDenied(
|
| 19 |
+
"Solo los Catadores pueden acceder a esta sección.")
|
| 20 |
+
|
| 21 |
+
return self.get_response(request)
|
| 22 |
+
|
| 23 |
+
# from django.http import HttpRequest
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
# class LoginTesterMiddleware():
|
| 27 |
+
# def __init__(self, get_response):
|
| 28 |
+
# self.get_response = get_response
|
| 29 |
+
|
| 30 |
+
# def __call__(self, req: HttpRequest):
|
| 31 |
+
# base_url_protected = "/cata/testers/"
|
| 32 |
+
|
| 33 |
+
# if req.path.startswith(base_url_protected):
|
| 34 |
+
# if not "cata_username" in req.session:
|
| 35 |
+
# id_participacion = req.COOKIES.get("id_participacion")
|
| 36 |
+
# if id_participacion:
|
| 37 |
+
# from tecnicas.controllers import ParticipacionController
|
| 38 |
+
# ParticipacionController.outSession(id_participacion)
|
| 39 |
+
# from django.shortcuts import redirect
|
| 40 |
+
# from django.urls import reverse
|
| 41 |
+
# response = redirect(reverse("cata_system:catador_login"))
|
| 42 |
+
# response.delete_cookie("id_participacion")
|
| 43 |
+
# return response
|
| 44 |
+
|
| 45 |
+
# response = self.get_response(req)
|
| 46 |
+
|
| 47 |
+
# return response
|
tecnicas/migrations/0020_remove_catador_apellido_remove_catador_correo_and_more.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Generated by Django 5.2.1 on 2025-10-18 23:34
|
| 2 |
+
|
| 3 |
+
import django.db.models.deletion
|
| 4 |
+
import shortuuid.main
|
| 5 |
+
from django.conf import settings
|
| 6 |
+
from django.db import migrations, models
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
class Migration(migrations.Migration):
|
| 10 |
+
|
| 11 |
+
dependencies = [
|
| 12 |
+
('tecnicas', '0019_rename_repecion_tecnica_repeticion_and_more'),
|
| 13 |
+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
| 14 |
+
]
|
| 15 |
+
|
| 16 |
+
operations = [
|
| 17 |
+
migrations.RemoveField(
|
| 18 |
+
model_name='catador',
|
| 19 |
+
name='apellido',
|
| 20 |
+
),
|
| 21 |
+
migrations.RemoveField(
|
| 22 |
+
model_name='catador',
|
| 23 |
+
name='correo',
|
| 24 |
+
),
|
| 25 |
+
migrations.RemoveField(
|
| 26 |
+
model_name='catador',
|
| 27 |
+
name='fechaNacimiento',
|
| 28 |
+
),
|
| 29 |
+
migrations.RemoveField(
|
| 30 |
+
model_name='catador',
|
| 31 |
+
name='nombre',
|
| 32 |
+
),
|
| 33 |
+
migrations.RemoveField(
|
| 34 |
+
model_name='catador',
|
| 35 |
+
name='usuarioCatador',
|
| 36 |
+
),
|
| 37 |
+
migrations.RemoveField(
|
| 38 |
+
model_name='presentador',
|
| 39 |
+
name='apellido',
|
| 40 |
+
),
|
| 41 |
+
migrations.RemoveField(
|
| 42 |
+
model_name='presentador',
|
| 43 |
+
name='contrasena',
|
| 44 |
+
),
|
| 45 |
+
migrations.RemoveField(
|
| 46 |
+
model_name='presentador',
|
| 47 |
+
name='nombre',
|
| 48 |
+
),
|
| 49 |
+
migrations.RemoveField(
|
| 50 |
+
model_name='presentador',
|
| 51 |
+
name='nombre_usuario',
|
| 52 |
+
),
|
| 53 |
+
migrations.AddField(
|
| 54 |
+
model_name='catador',
|
| 55 |
+
name='genero',
|
| 56 |
+
field=models.CharField(blank=True, choices=[('Hombre', 'Hombre'), ('Mujer', 'Mujer')], default='Hombre', max_length=10, null=True),
|
| 57 |
+
),
|
| 58 |
+
migrations.AddField(
|
| 59 |
+
model_name='catador',
|
| 60 |
+
name='nacimiento',
|
| 61 |
+
field=models.DateField(blank=True, null=True),
|
| 62 |
+
),
|
| 63 |
+
migrations.AddField(
|
| 64 |
+
model_name='catador',
|
| 65 |
+
name='user',
|
| 66 |
+
field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_catador', to=settings.AUTH_USER_MODEL),
|
| 67 |
+
),
|
| 68 |
+
migrations.AddField(
|
| 69 |
+
model_name='presentador',
|
| 70 |
+
name='fecha_nacimiento',
|
| 71 |
+
field=models.DateField(blank=True, null=True),
|
| 72 |
+
),
|
| 73 |
+
migrations.AddField(
|
| 74 |
+
model_name='presentador',
|
| 75 |
+
name='telefono',
|
| 76 |
+
field=models.BigIntegerField(default=555),
|
| 77 |
+
),
|
| 78 |
+
migrations.AddField(
|
| 79 |
+
model_name='presentador',
|
| 80 |
+
name='user',
|
| 81 |
+
field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='user_presentador', to=settings.AUTH_USER_MODEL),
|
| 82 |
+
),
|
| 83 |
+
migrations.AlterField(
|
| 84 |
+
model_name='catador',
|
| 85 |
+
name='telefono',
|
| 86 |
+
field=models.BigIntegerField(default=555),
|
| 87 |
+
),
|
| 88 |
+
migrations.AlterField(
|
| 89 |
+
model_name='sesionsensorial',
|
| 90 |
+
name='codigo_sesion',
|
| 91 |
+
field=models.CharField(default=shortuuid.main.ShortUUID.uuid, editable=False, max_length=22, primary_key=True, serialize=False),
|
| 92 |
+
),
|
| 93 |
+
]
|
tecnicas/models/catador.py
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
|
|
| 1 |
from django.db import models
|
| 2 |
|
|
|
|
| 3 |
class Catador(models.Model):
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
telefono = models.BigIntegerField()
|
| 8 |
-
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
def __str__(self):
|
| 12 |
-
return self.
|
|
|
|
| 1 |
+
from django.contrib.auth.models import User
|
| 2 |
from django.db import models
|
| 3 |
|
| 4 |
+
|
| 5 |
class Catador(models.Model):
|
| 6 |
+
user = models.OneToOneField(
|
| 7 |
+
User, on_delete=models.CASCADE, related_name='user_catador', default=None, null=True)
|
| 8 |
+
nacimiento = models.DateField(null=True, blank=True)
|
| 9 |
+
telefono = models.BigIntegerField(default=555)
|
| 10 |
+
genero = models.CharField(
|
| 11 |
+
max_length=10,
|
| 12 |
+
choices=[('Hombre', 'Hombre'), ('Mujer', 'Mujer')],
|
| 13 |
+
null=True, blank=True, default="Hombre"
|
| 14 |
+
)
|
| 15 |
|
| 16 |
def __str__(self):
|
| 17 |
+
return f"Catador: {self.user.username}"
|
tecnicas/models/presentador.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
|
|
| 1 |
from django.db import models
|
| 2 |
|
|
|
|
| 3 |
class Presentador(models.Model):
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
|
| 9 |
def __str__(self):
|
| 10 |
-
return self.
|
|
|
|
| 1 |
+
from django.contrib.auth.models import User
|
| 2 |
from django.db import models
|
| 3 |
|
| 4 |
+
|
| 5 |
class Presentador(models.Model):
|
| 6 |
+
user = models.OneToOneField(
|
| 7 |
+
User, on_delete=models.CASCADE, related_name='user_presentador', default=None, null=True)
|
| 8 |
+
fecha_nacimiento = models.DateField(null=True, blank=True)
|
| 9 |
+
telefono = models.BigIntegerField(default=555)
|
| 10 |
|
| 11 |
def __str__(self):
|
| 12 |
+
return f"Presentador: {self.user.username}"
|
tecnicas/templates/tecnicas/auth.html
CHANGED
|
@@ -6,26 +6,33 @@
|
|
| 6 |
<article class="cts-container-main">
|
| 7 |
<article class="cts-wrap-content">
|
| 8 |
<form action="" method="post" class="p-8 rounded-xl text-black">
|
| 9 |
-
<header class="text-center">
|
| 10 |
<h1 class="text-5xl max-sm:text-3xl font-bold">Cata System</h1>
|
| 11 |
<p class="text-2xl max-sm:text-xl font-semibold mt-3">Presentador</p>
|
| 12 |
</header>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
<section class="flex flex-col gap-6 items-center w-full mt-5">
|
| 14 |
-
<label for="
|
| 15 |
-
<input type="text" name="
|
| 16 |
class="placeholder:text-gray-400 placeholder:font-semibold text-xl max-sm:text-base bg-surface-ligt py-3 px-6 rounded-xl lg:w-sm border-b-2 border-surface-sweet"
|
| 17 |
required>
|
| 18 |
</label>
|
| 19 |
|
| 20 |
-
<label for="
|
| 21 |
-
<input type="text" name="
|
| 22 |
class="placeholder:text-gray-400 placeholder:font-semibold text-xl max-sm:text-base bg-surface-ligt py-3 px-6 rounded-xl lg:w-sm border-b-2 border-surface-sweet"
|
| 23 |
required>
|
| 24 |
</label>
|
| 25 |
|
| 26 |
<section class="flex flex-row flex-wrap gap-4 w-f ull justify-center">
|
| 27 |
-
<button type="submit"
|
| 28 |
-
class="cts-btn-general cts-btn-primary btn-push uppercase lg:w-sm">
|
| 29 |
Ingresar
|
| 30 |
</button>
|
| 31 |
</section>
|
|
|
|
| 6 |
<article class="cts-container-main">
|
| 7 |
<article class="cts-wrap-content">
|
| 8 |
<form action="" method="post" class="p-8 rounded-xl text-black">
|
| 9 |
+
<header class="text-center mb-2">
|
| 10 |
<h1 class="text-5xl max-sm:text-3xl font-bold">Cata System</h1>
|
| 11 |
<p class="text-2xl max-sm:text-xl font-semibold mt-3">Presentador</p>
|
| 12 |
</header>
|
| 13 |
+
|
| 14 |
+
{% if error %}
|
| 15 |
+
{% include "./components/error-message.html" with message=error %}
|
| 16 |
+
{% endif %}
|
| 17 |
+
{% if message %}
|
| 18 |
+
{% include "./components/error-message.html" with message=message %}
|
| 19 |
+
{% endif %}
|
| 20 |
+
|
| 21 |
<section class="flex flex-col gap-6 items-center w-full mt-5">
|
| 22 |
+
<label for="username">
|
| 23 |
+
<input type="text" name="username" id="username" placeholder="Ingrese Nombre de Usuario"
|
| 24 |
class="placeholder:text-gray-400 placeholder:font-semibold text-xl max-sm:text-base bg-surface-ligt py-3 px-6 rounded-xl lg:w-sm border-b-2 border-surface-sweet"
|
| 25 |
required>
|
| 26 |
</label>
|
| 27 |
|
| 28 |
+
<label for="password">
|
| 29 |
+
<input type="text" name="password" id="password" placeholder="Ingrese Contraseña"
|
| 30 |
class="placeholder:text-gray-400 placeholder:font-semibold text-xl max-sm:text-base bg-surface-ligt py-3 px-6 rounded-xl lg:w-sm border-b-2 border-surface-sweet"
|
| 31 |
required>
|
| 32 |
</label>
|
| 33 |
|
| 34 |
<section class="flex flex-row flex-wrap gap-4 w-f ull justify-center">
|
| 35 |
+
<button type="submit" class="cts-btn-general cts-btn-primary btn-push uppercase lg:w-sm">
|
|
|
|
| 36 |
Ingresar
|
| 37 |
</button>
|
| 38 |
</section>
|
tecnicas/urls.py
CHANGED
|
@@ -5,73 +5,73 @@ from . import views
|
|
| 5 |
|
| 6 |
app_name = "cata_system"
|
| 7 |
urlpatterns = [
|
| 8 |
-
path("", views.mainPanel, name="index"),
|
| 9 |
-
|
| 10 |
# Atentificacion
|
| 11 |
path("autenticacion",
|
| 12 |
views.autentication,
|
| 13 |
name="autenticacion"),
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
# Gestion de catadores
|
| 17 |
-
path("panel-catadores",
|
| 18 |
views.testerMenu,
|
| 19 |
name="panel_catadores"),
|
| 20 |
|
| 21 |
-
path("crear-catador",
|
| 22 |
views.testerCreate,
|
| 23 |
name="crear_catador"),
|
| 24 |
|
| 25 |
-
path("buscar-catador",
|
| 26 |
views.testerSearch,
|
| 27 |
name="buscar_catador"),
|
| 28 |
|
| 29 |
|
| 30 |
# Creacion de sessiones sensoriales
|
| 31 |
-
path("seleccion-tecnica",
|
| 32 |
views.selecionTecnica,
|
| 33 |
name="seleccion_tecnica"),
|
| 34 |
|
| 35 |
-
path("panel-configuracion-basic",
|
| 36 |
views.configurationPanelBasic,
|
| 37 |
name="panel_configuracion_basic"),
|
| 38 |
|
| 39 |
-
path("panel-configuracion-tags",
|
| 40 |
views.configurationPanelTags,
|
| 41 |
name="panel_configuracion_tags"),
|
| 42 |
|
| 43 |
-
path("panel-configuracion-codes",
|
| 44 |
views.configurationPanelCodes,
|
| 45 |
name="panel_configuracion_codes"),
|
| 46 |
|
| 47 |
-
path("panel-configuracion-words",
|
| 48 |
views.configurationPanelWords,
|
| 49 |
name="panel_configuracion_words"),
|
| 50 |
|
| 51 |
-
path("creando-sesion",
|
| 52 |
views.createSession,
|
| 53 |
name="creando_sesion"),
|
| 54 |
|
| 55 |
|
| 56 |
# Gestion de sesiones sensoriales
|
| 57 |
-
path("panel-sesiones/<int:page>",
|
| 58 |
views.sesionsPanel,
|
| 59 |
name="panel_sesiones"),
|
| 60 |
|
| 61 |
-
path("detalles-sesion/<str:session_code>",
|
| 62 |
views.sessionDetails,
|
| 63 |
name="detalles_sesion"),
|
| 64 |
|
| 65 |
-
path("monitor/<str:session_code>",
|
| 66 |
views.sessionMonitor,
|
| 67 |
name="monitor_sesion"),
|
| 68 |
|
| 69 |
|
| 70 |
# Vistas para catadores
|
| 71 |
-
path("catador-login",
|
| 72 |
-
views.testerLogin,
|
| 73 |
-
name="catador_login"),
|
| 74 |
-
|
| 75 |
path("testers/catador-main",
|
| 76 |
views.mainTesterForm,
|
| 77 |
name="catador_main"),
|
|
@@ -81,7 +81,7 @@ urlpatterns = [
|
|
| 81 |
name="session_convencional"),
|
| 82 |
|
| 83 |
# APIs
|
| 84 |
-
path("nueva-etiqueta",
|
| 85 |
views.newTag,
|
| 86 |
name="nueva_etiqueta"),
|
| 87 |
|
|
|
|
| 5 |
|
| 6 |
app_name = "cata_system"
|
| 7 |
urlpatterns = [
|
|
|
|
|
|
|
| 8 |
# Atentificacion
|
| 9 |
path("autenticacion",
|
| 10 |
views.autentication,
|
| 11 |
name="autenticacion"),
|
| 12 |
|
| 13 |
+
path("catador-login",
|
| 14 |
+
views.testerLogin,
|
| 15 |
+
name="catador_login"),
|
| 16 |
+
|
| 17 |
+
# Pantalla principal Presetador
|
| 18 |
+
path("presenter/", views.mainPanel, name="index"),
|
| 19 |
|
| 20 |
# Gestion de catadores
|
| 21 |
+
path("presenter/panel-catadores",
|
| 22 |
views.testerMenu,
|
| 23 |
name="panel_catadores"),
|
| 24 |
|
| 25 |
+
path("presenter/crear-catador",
|
| 26 |
views.testerCreate,
|
| 27 |
name="crear_catador"),
|
| 28 |
|
| 29 |
+
path("presenter/buscar-catador",
|
| 30 |
views.testerSearch,
|
| 31 |
name="buscar_catador"),
|
| 32 |
|
| 33 |
|
| 34 |
# Creacion de sessiones sensoriales
|
| 35 |
+
path("presenter/seleccion-tecnica",
|
| 36 |
views.selecionTecnica,
|
| 37 |
name="seleccion_tecnica"),
|
| 38 |
|
| 39 |
+
path("presenter/panel-configuracion-basic",
|
| 40 |
views.configurationPanelBasic,
|
| 41 |
name="panel_configuracion_basic"),
|
| 42 |
|
| 43 |
+
path("presenter/panel-configuracion-tags",
|
| 44 |
views.configurationPanelTags,
|
| 45 |
name="panel_configuracion_tags"),
|
| 46 |
|
| 47 |
+
path("presenter/panel-configuracion-codes",
|
| 48 |
views.configurationPanelCodes,
|
| 49 |
name="panel_configuracion_codes"),
|
| 50 |
|
| 51 |
+
path("presenter/panel-configuracion-words",
|
| 52 |
views.configurationPanelWords,
|
| 53 |
name="panel_configuracion_words"),
|
| 54 |
|
| 55 |
+
path("presenter/creando-sesion",
|
| 56 |
views.createSession,
|
| 57 |
name="creando_sesion"),
|
| 58 |
|
| 59 |
|
| 60 |
# Gestion de sesiones sensoriales
|
| 61 |
+
path("presenter/panel-sesiones/<int:page>",
|
| 62 |
views.sesionsPanel,
|
| 63 |
name="panel_sesiones"),
|
| 64 |
|
| 65 |
+
path("presenter/detalles-sesion/<str:session_code>",
|
| 66 |
views.sessionDetails,
|
| 67 |
name="detalles_sesion"),
|
| 68 |
|
| 69 |
+
path("presenter/monitor/<str:session_code>",
|
| 70 |
views.sessionMonitor,
|
| 71 |
name="monitor_sesion"),
|
| 72 |
|
| 73 |
|
| 74 |
# Vistas para catadores
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
path("testers/catador-main",
|
| 76 |
views.mainTesterForm,
|
| 77 |
name="catador_main"),
|
|
|
|
| 81 |
name="session_convencional"),
|
| 82 |
|
| 83 |
# APIs
|
| 84 |
+
path("api/nueva-etiqueta",
|
| 85 |
views.newTag,
|
| 86 |
name="nueva_etiqueta"),
|
| 87 |
|
tecnicas/views/autentication.py
CHANGED
|
@@ -1,4 +1,29 @@
|
|
| 1 |
-
from django.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from django.contrib.auth import authenticate, login
|
| 2 |
+
from django.http import HttpRequest, JsonResponse
|
| 3 |
+
from django.views.decorators.csrf import csrf_exempt
|
| 4 |
+
from django.shortcuts import render, redirect
|
| 5 |
+
from tecnicas.utils import general_error
|
| 6 |
+
from tecnicas.models import Presentador
|
| 7 |
|
| 8 |
+
@csrf_exempt
|
| 9 |
+
def autentication(req: HttpRequest):
|
| 10 |
+
context_view = {}
|
| 11 |
+
|
| 12 |
+
if req.method == "GET":
|
| 13 |
+
return render(req, "tecnicas/auth.html")
|
| 14 |
+
elif req.method == "POST":
|
| 15 |
+
username = req.POST.get("username")
|
| 16 |
+
password = req.POST.get("password")
|
| 17 |
+
|
| 18 |
+
user = authenticate(username=username, password=password)
|
| 19 |
+
|
| 20 |
+
if user is not None and hasattr(user, "user_presentador"):
|
| 21 |
+
login(req, user)
|
| 22 |
+
return redirect("cata_system:index")
|
| 23 |
+
else:
|
| 24 |
+
return JsonResponse({
|
| 25 |
+
"success": False,
|
| 26 |
+
"error": "Credenciales inválidas o no es un Presentador"
|
| 27 |
+
})
|
| 28 |
+
else:
|
| 29 |
+
return general_error("Método no permitido")
|
tecnicas/views/main_panel.py
CHANGED
|
@@ -4,7 +4,6 @@ def mainPanel(req):
|
|
| 4 |
pres = Presente("1233MMAS092222", "Juan Mendez Salazar")
|
| 5 |
return render(req, "tecnicas/main-panel.html", context={"presentador":pres})
|
| 6 |
|
| 7 |
-
# Auxiliar classes
|
| 8 |
class Presente():
|
| 9 |
def __init__(self, id, nombre):
|
| 10 |
self.id = id
|
|
|
|
| 4 |
pres = Presente("1233MMAS092222", "Juan Mendez Salazar")
|
| 5 |
return render(req, "tecnicas/main-panel.html", context={"presentador":pres})
|
| 6 |
|
|
|
|
| 7 |
class Presente():
|
| 8 |
def __init__(self, id, nombre):
|
| 9 |
self.id = id
|