Commit 964c9439 by Álex Álvarez

Primera versión

parents
# Ignorar archivos de configuración sensibles
config.json
/media/users
/media/educaIAApp
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="FacetManager">
<facet type="django" name="Django">
<configuration>
<option name="rootFolder" value="$MODULE_DIR$" />
<option name="settingsModule" value="educaIAProject/settings.py" />
<option name="manageScript" value="$MODULE_DIR$/manage.py" />
<option name="environment" value="&lt;map/&gt;" />
<option name="doNotUseTestRunner" value="false" />
<option name="trackFilePattern" value="migrations" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.12 (educaIAProject)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Django" />
<option name="TEMPLATE_FOLDERS">
<list>
<option value="$MODULE_DIR$/../educaIAProject\templates" />
</list>
</option>
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="FacetManager">
<facet type="django" name="Django">
<configuration>
<option name="rootFolder" value="$MODULE_DIR$" />
<option name="settingsModule" value="EducaIAProject/settings.py" />
<option name="manageScript" value="$MODULE_DIR$/manage.py" />
<option name="environment" value="&lt;map/&gt;" />
<option name="doNotUseTestRunner" value="false" />
<option name="trackFilePattern" value="migrations" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.12 (educaIAProject)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TemplatesService">
<option name="TEMPLATE_CONFIGURATION" value="Django" />
<option name="TEMPLATE_FOLDERS">
<list>
<option value="$MODULE_DIR$/../EducaIAProject\templates" />
</list>
</option>
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="djangoProject1.urls.*" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.12 (educaIAProject)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (educaIAProject)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/educaIAProject.iml" filepath="$PROJECT_DIR$/.idea/educaIAProject.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
from django.contrib import admin
from django.contrib.auth.models import User
# Register your models here.
admin.site.register(User)
\ No newline at end of file
from django.apps import AppConfig
class EducaiaappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'educaIAApp'
# Generated by Django 5.0.4 on 2024-06-10 18:34
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Conversacion',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('fecha', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Mensaje',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('sender', models.CharField(max_length=10)),
('content', models.TextField()),
('timestamp', models.DateTimeField(auto_now_add=True)),
],
),
migrations.CreateModel(
name='Usuario',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.CharField(max_length=100)),
('password', models.CharField(max_length=50)),
('imagen', models.ImageField(blank=True, null=True, upload_to='educaIAApp')),
('grado', models.CharField(max_length=50)),
],
options={
'verbose_name': 'usuario',
'verbose_name_plural': 'usuarios',
},
),
]
# Generated by Django 5.0.4 on 2024-06-10 18:34
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('educaIAApp', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.AddField(
model_name='conversacion',
name='usuario',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='mensaje',
name='conversacion',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mensajes', to='educaIAApp.conversacion'),
),
]
# Generated by Django 5.0.4 on 2024-06-12 18:00
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('educaIAApp', '0002_initial'),
]
operations = [
migrations.DeleteModel(
name='Usuario',
),
]
# Generated by Django 5.0.4 on 2024-06-12 18:42
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('educaIAApp', '0003_delete_usuario'),
]
operations = [
migrations.CreateModel(
name='Conocimiento',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('conocimiento', models.CharField()),
('prompt', models.CharField()),
('conversacion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='conocimientos', to='educaIAApp.conversacion')),
],
),
]
# Generated by Django 5.0.4 on 2024-06-12 18:47
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('educaIAApp', '0004_conocimiento'),
]
operations = [
migrations.RemoveField(
model_name='conocimiento',
name='prompt',
),
]
# Generated by Django 5.0.4 on 2024-06-12 19:00
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('educaIAApp', '0005_remove_conocimiento_prompt'),
]
operations = [
migrations.CreateModel(
name='Prompting',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('prompt', models.CharField()),
('conversacion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prompts', to='educaIAApp.conversacion')),
],
),
]
from django.db import models
from users.models import User
# Create your models here.
#class User(AbstractUser):
# grado = models.CharField(max_length=10)
class Conversacion(models.Model):
usuario = models.ForeignKey(User, on_delete=models.CASCADE)
fecha = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Conversación del {self.fecha} de {self.usuario.username}"
class Mensaje(models.Model):
conversacion = models.ForeignKey(Conversacion, on_delete=models.CASCADE, related_name='mensajes')
sender = models.CharField(max_length=10) # 'user' o 'bot'
content = models.TextField()
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.sender}: {self.content[:50]}"
class Conocimiento(models.Model):
conversacion = models.ForeignKey(Conversacion, on_delete=models.CASCADE, related_name='conocimientos')
conocimiento = models.CharField()
def __str__(self):
return f"{self.conocimiento}"
class Prompting(models.Model):
conversacion = models.ForeignKey(Conversacion, on_delete=models.CASCADE, related_name='prompts')
prompt = models.CharField()
def __str__(self):
return f"{self.prompt}"
\ No newline at end of file
body {
font-family: Arial, sans-serif;
/* background-color: #5894A1; */
}
.container {
box-sizing: border-box;
position: fixed;
top: 0;
right: 0;
width: 80%;
height: 100vh;
/* margin: 100px auto; */
padding: 20px;
-webkit-text-fill-color: white;
text-align: center;
/* margin-bottom: 30px; */
background-color: #3D6A74;
display: flex;
flex-direction: column;
/*align-items: flex-start; /*Alinea los elementos hijos a la izquierda */
/*justify-content: flex-end; /*Alinea los elementos al final (abajo) */
/* border-radius: 10px; Ajusta el radio de la esquina aquí */
}
.user-message{
-webkit-text-fill-color: #cdcdcd;
}
.conversaciones{
box-sizing: border-box;
position: fixed;
top: 0;
left: 0;
width: 20%;
height: 100vh;
/* margin: 100px auto; */
padding: 20px;
/* text-align: center; */
-webkit-text-fill-color: white;
margin-bottom: 30px;
background-color: #5894A1;
display: flex;
flex-direction: column;
justify-content: space-between;/* Espacia los hijos al inicio y al final */
/* border-radius: 10px; Ajusta el radio de la esquina aquí */
}
.messages-container {
overflow-y: auto; /* Permite desplazamiento vertical para los mensajes */
flex-grow: 1; /* Hace que este contenedor ocupe el espacio disponible */
justify-content: left;
text-align: left;
}
.input-container {
width: 100%;
display: flex; /* Hace que el input y el botón estén en la misma línea */
justify-content: center; /* Centra los elementos en el contenedor */
}
.user-input {
border: none;
padding: 10px;
-webkit-text-fill-color: black;
width: 80%; /* Ajusta el ancho para dejar espacio para el botón */
border-radius: 10px; /*Ajusta el radio de la esquina aquí*/
}
.button {
width: 100px;
border: none;
padding: 10px;
background-color: green;
margin-left: 20px; /* Espacio entre el input y el botón */
cursor:pointer;
border-radius: 10px; /*Ajusta el radio de la esquina aquí*/
}
.button:hover {
background-color: #50f553; /* Cambio de color al pasar el cursor */
}
.button-conversacion{
width: 90%;
border: none;
padding: 10px;
background-color: #000AFF;
color: white;
font-weight: bold;
text-decoration: none;
margin-top: 10px;
cursor: pointer;
border-radius: 10px;
}
.button-conversacion:hover{
background-color: #0056b3;
}
.conversacion{
-webkit-text-fill-color: white;
text-decoration: none;
}
.content {
flex-grow: 1;
width: 100%;
overflow-y: auto;
display: flex;
flex-direction: column;
justify-content: start; /* Asegura que el contenido comience desde arriba */
overflow-x: hidden;
}
.footer {
display: flex;
justify-content: space-between; /* Alinea un elemento a la izquierda y otro a la derecha */
width: 100%; /* Asegura que el footer ocupe todo el ancho disponible */
}
.formulario{
width: 100%;
}
.hamburger-menu{
width: 50px;
background-color: #000AFF;
border-radius: 10%;
}
@media(min-width: 0px) and (max-width: 1130px){
.conversaciones{
display: none;
}
.container{
width: 100%;
}
.hamburger-menu {
display: block;
font-size: 30px;
cursor: pointer;
}
.conversaciones.active {
display: block;
width: 40%;
overflow-y: auto;
}
}
@media(min-width: 1131px){
.hamburger-menu {
display: none;
}
}
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 100px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
margin-bottom: 30px;
}
.codigo{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
border-radius: 10px;
margin-bottom: 20px;
padding-left: 10px;
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 30px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
}
.editor{
-webkit-text-fill-color: black;
}
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
margin-top: 10px;
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
\ No newline at end of file
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 60%;
margin: 100px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
margin-bottom: 30px;
}
.options {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0; /* Lo colocará al principio de la pantalla verticalmente */
right: 0; /* Lo colocará al final de la pantalla horizontalmente */
width: 40%; /* Ocupará el 40% del ancho de la pantalla */
height: 100vh; /* Ocupará el 100% de la altura de la pantalla */
background-color: #3D6A74; /* Color de fondo para visualizar el área ocupada */
padding: 20px; /* Espacio interno para separar el contenido del borde */
box-sizing: border-box; /* Incluye el padding en el ancho y alto totales */
}
.options .com{
text-align: center;
-webkit-text-fill-color: white;
margin-top: 50%;
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
text-decoration: none;
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
.login{
text-decoration: none;
}
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 100px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
margin-bottom: 30px;
}
.usuario{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
margin-bottom: 5px;
border-radius: 10px;
padding-left: 10px;
}
.passwd{
-webkit-text-fill-color: black;
height: 30px;
width: 42%;
border-radius: 10px;
padding-left: 10px;
}
a.recuperacion-link {
text-decoration: underline;
color: inherit; /* Esto asume que quieres que el enlace tenga el mismo color que el texto circundante */
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 97%;
margin: 30px auto;
padding: 20px;
-webkit-text-fill-color: white;
text-align: center;
justify-content: center;
max-height: 90vh;
overflow-y: auto; /* Habilita el desplazamiento vertical */
}
.elemento{
text-decoration: none;
color: white;
}
ul{
list-style: none;
padding: 0;
}
ul li {
display: flex; /* Usa flexbox para alinear los elementos */
align-items: center; /* Alinea los elementos verticalmente en el centro */
padding: 10px 0; /* Espacio entre los elementos de la lista */
border-bottom: 1px solid #ccc; /* Borde inferior para la línea horizontal */
}
ul li::before {
content: '\2022'; /* Caracter de punto (bullet) */
color: white; /* Color del punto */
margin-right: 10px; /* Espacio entre el punto y el texto */
}
ul li a {
margin-left: auto; /* Empuja el botón al final del contenedor flex */
}
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
margin-top: 10px;
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
.volver{
text-align: center;
}
\ No newline at end of file
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 100px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
margin-bottom: 30px;
}
.usuario{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
border-radius: 10px;
margin-bottom: 20px;
padding-left: 10px;
}
.mail{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
border-radius: 10px;
margin-bottom: 10px;
padding-left: 10px;
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
text-decoration: none;
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
\ No newline at end of file
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 30px auto;
padding: 20px;
text-align: center;
-webkit-text-fill-color: white;
}
.email{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
border-radius: 10px;
margin-bottom: 5px;
padding-left: 10px;
}
.usuario{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
border-radius: 10px;
margin-bottom: 5px;
padding-left: 10px;
}
.passwd{
-webkit-text-fill-color: black;
height: 30px;
border-radius: 10px;
width: 42%;
padding-left: 10px;
}
.passwd_conf{
-webkit-text-fill-color: black;
margin-top: 5px;
margin-bottom: 5px;
height: 30px;
border-radius: 10px;
width: 42%;
padding-left: 10px;
}
.selector{
-webkit-text-fill-color: black;
margin-bottom: 20px;
height: 35px;
border-radius: 10px;
width: 42.5%;
padding-left: 10px;
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
body {
font-family: Arial, sans-serif;
background-color: #5894A1;
}
.container {
position: fixed; /* Para fijar el elemento en la pantalla */
top: 0;
left: 0;
width: 100%;
margin: 100px auto;
padding: 0px;
text-align: center;
-webkit-text-fill-color: white;
margin-bottom: 0px;
}
.nombre{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
margin-bottom: 5px;
border-radius: 10px;
}
.apellidos{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
margin-bottom: 5px;
border-radius: 10px;
}
.passwd{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
margin-bottom: 5px;
border-radius: 10px;
}
.passwd2{
-webkit-text-fill-color: black;
width: 42%;
height: 30px;
margin-bottom: 20px;
border-radius: 10px;
}
/* Estilos para el botón */
.button {
background-color: #000AFF; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
}
/* Estilos para el botón al pasar el cursor por encima */
.button:hover {
background-color: #0056b3; /* Cambio de color al pasar el cursor */
}
.button-prompt{
background-color: rgba(255, 242, 0, 0.82);
-webkit-text-fill-color: black;
font-weight: bold;
padding: 10px 20px;
border: none;
border-radius: 10px;
cursor: pointer;
text-decoration: none;
margin-top: 10px;
}
.button-prompt:hover{
background-color: #9bb300;
}
/* Estilos para el botón */
.logout {
background-color: #FF0000; /* Color de fondo azul */
color: white; /* Color del texto blanco */
font-weight: bold; /* Texto en negrita */
padding: 10px 20px; /* Espacio interno del botón */
border: none; /* Sin borde */
border-radius: 10px; /* Esquinas curvas */
cursor: pointer; /* Cursor al pasar por encima */
text-decoration: none;
margin-top: 10px;
}
/* Estilos para el botón al pasar el cursor por encima */
.logout:hover {
background-color: #f56d6d; /* Cambio de color al pasar el cursor */
}
\ No newline at end of file
Diseños Experimentales: En los diseños experimentales existe un grupo experimental al que se le aplica un tratamiento, y se mide la variable dependiente para comprobar si el tratamiento ha tenido algún tipo de efecto.
Diseños Experimentales: En los diseños experimentales existe un grupo experimental al que se le aplica un tratamiento, y se mide la variable dependiente para comprobar si el tratamiento ha tenido algún tipo de efecto.
Diseño Pretest-Postest de un Solo Grupo: Es un diseño de tipo experimental. En este diseño no existe un grupo control, solo existe un grupo experimental que recibe un tratamiento. Se mide la variable dependiente en pretest antes de recibir el tratamiento y en postest después de recibir el tratamiento.
Diseño Solo Postest con Grupo Control: Es un diseño de tipo experimental. Existe un grupo experimental que recibe un tratamiento y un grupo control que recibe un placebo. Se mide la variable dependiente en el grupo experimental en postest una sola vez después de recibir el tratamiento. Se mide la variable dependiente en el grupo control en postest una sola vez después de recibir el placebo.
Diseño Pretest-Postest con Grupo Control: Es un diseño de tipo experimental. Existe un grupo experimental que recibe un tratamiento y un grupo control que recibe un placebo. Se mide la variable dependiente en pretest en el grupo experimental antes de recibir el tratamiento y en postest después de recibir el tratamiento. En el grupo control también se mide la variable dependiente en pretest antes de recibir el placebo y en postest después de recibir el placebo.
\ No newline at end of file
Diseños Experimentales: En los diseños experimentales existe un grupo experimental al que se le aplica un tratamiento, y se mide la variable dependiente para comprobar si el tratamiento ha tenido algún tipo de efecto.
Diseños Experimentales: En los diseños experimentales existe un grupo experimental al que se le aplica un tratamiento, y se mide la variable dependiente para comprobar si el tratamiento ha tenido algún tipo de efecto.
Diseño Pretest-Postest de un Solo Grupo: Es un diseño de tipo experimental. En este diseño no existe un grupo control, solo existe un grupo experimental que recibe un tratamiento. Se mide la variable dependiente en pretest antes de recibir el tratamiento y en postest después de recibir el tratamiento.
Diseño Pretest-Postest con Grupo Control: Es un diseño de tipo experimental. Existe un grupo experimental que recibe un tratamiento y un grupo control que recibe un placebo. Se mide la variable dependiente en pretest en el grupo experimental antes de recibir el tratamiento y en postest después de recibir el tratamiento. En el grupo control también se mide la variable dependiente en pretest antes de recibir el placebo y en postest después de recibir el placebo.
\ No newline at end of file
Diseños No Experimentales: En los diseños no experimentales se realiza una evaluación diagnóstica de la variable o variables de interés. En los diseños no experimentales nunca existe un tratamiento.
Diseños No Experimentales: En los diseños no experimentales se realiza una evaluación diagnóstica de la variable o variables de interés. En los diseños no experimentales nunca existe un tratamiento.
Diseño Transversal: es un tipo de diseño no experimental. Se realiza una única evaluación de la variable o las variables de interés en un grupo. Este diseño sirve para analizar cómo se distribuyen las variables en el grupo y cómo se relacionan entre sí. En este diseño no existe un tratamiento.
Diseño Longitudinal: es un tipo de diseño no experimental. Se realiza una evaluación de la variable o las variables de interés en un grupo más de una vez a lo largo del tiempo. Este diseño sirve para analizar cómo evolucionan las variables evaluadas, y no existe un tratamiento.
\ No newline at end of file
Muestreo No Probabilístico: tipo de muestreo en el que la selección de sujetos no depende del azar. Muestreo Por Disponibilidad: tipo de muestreo no probabilístico en el que la muestra se obtiene a partir de la selección de sujetos disponibles. Muestreo Por Bola de Nieve: tipo de muestreo no probabilístico en el que la muestra se obtiene a partir de un sujeto inicial que recluta a otros. Muestreo Por Criterios: tipo de muestreo no probabilístico en que la muestra se obtiene a partir de sujetos que cumplen condiciones específicas. Muestreo Por Cuotas: tipo de muestreo no probabilístico en el que la muestra se obtiene según características definidas para lograr representatividad.
\ No newline at end of file
Muestreo Probabilístico: tipo de muestreo en el que la selección de sujetos se hace al azar.
Muestreo Aleatorio Simple: tipo de muestreo probabilístico en el que la muestra se obtiene a partir de un listado previo.
Muestreo Por Conglomerados: tipo de muestreo probabilístico en el que la muestra se obtiene a partir de una selección aleatoria de grupos de individuos.
Muestreo Estratificado: tipo de muestreo probabilístico en el que la muestra se obtiene a partir de una selección aleatoria dentro de estratos definidos.
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de diseño experimental para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de diseño a partir del ejemplo. Por lo tanto es importante que los ejemplos no incluyan el tipo de diseño del que se trata.
Para generar estos ejemplos solo usaras la información de tipos de diseños que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de diseño, pensarás en un tipo de diseño de los proporcionados en el contexto.
Una vez elegido el tipo de diseño generarás un ejemplo de este tipo de diseño.
En el caso de que el tipo de diseño elegido sea un diseño experimental pretest-postest con grupo de control es estrictamente necesario que se incluya de manera explíctita en el ejemplo que se realiza una evaluación pretest.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿De qué tipo de diseño experimental se trata?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de diseño no experimental para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de diseño a partir del ejemplo. Por lo tanto es importante que los ejemplos no incluyan el tipo de diseño del que se trata.
Para generar estos ejemplos solo usarás la información de tipos de diseños que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de diseño, pensarás en un tipo de diseño de los proporcionados en el contexto.
Una vez elegido el tipo de diseño generarás un ejemplo de este tipo de diseño.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿De qué tipo de diseño no experimental se trata?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de muestreos no probabilísticos para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de muestreo a partir del ejemplo. Por lo tanto es importante que los ejemplos no incluyan el tipo de muestreo del que se trata.
Para generar estos ejemplos solo usarás la información de tipos de muestreos que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de muestreo no probabilístico, pensarás en un tipo de muestreo de los proporcionados en el contexto.
Una vez elegido el tipo de muestreo generarás un ejemplo de este tipo de muestreo.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿De qué tipo de muestreo no probabilístico se trata?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de muestreos probabilísticos para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de muestreo a partir del ejemplo. Por lo tanto es importante que los ejemplos no incluyan el tipo de muestreo del que se trata.
Para generar estos ejemplos solo usarás la información de tipos de muestreos que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de muestreo probabilístico, pensarás en un tipo de muestreo de los proporcionados en el contexto.
Una vez elegido el tipo de muestreo generarás un ejemplo de este tipo de muestreo.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿De qué tipo de muestreo probabilístico se trata?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de variables en diseños experimentales para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de las variables a partir del ejemplo. Por lo tanto es fundamental que los ejemplos no incluyan el tipo de variables que incluyen.
Para generar estos ejemplos solo usarás la información de tipos de diseños que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de variables en diseños experimentales, pensarás en un diseño experimental y en sus variables.
Una vez elegido el diseño con sus variables generarás un ejemplo de este tipo de diseño.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿Puedes identificar las variables de este diseño experimental?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Te voy a proporcionar tu comportamiento entre triples tildes:
```
#FUNCIONAMIENTO
Tu funcionamiento consistirá en ser una máquina de ejemplos de tipos de variables en diseños no experimentales para la asignatura Metdología de Investigación Educativa. Por lo tanto tus respuestas deben estar orientadas a un contexto educativo.
Tus ejemplos serán utilizados como ejercicios para que el usuario trate de identificar el tipo de las variables a partir del ejemplo. Por lo tanto es fundamental que los ejemplos no incluyan el tipo de variables que incluyen.
Para generar estos ejemplos solo usarás la información de tipos de diseños que te he proporcionado previamente.
#COMPORTAMIENTO
Cuando se soliciten ejemplos de tipos de variables en diseños no experimentales, pensarás en un diseño no experimental y en sus variables.
Una vez elegido el diseño con sus variables generarás un ejemplo de este tipo de diseño.
Finalmente, se incluirá al final del ejemplo las siguientes preguntas para el usuario: "¿Puedes identificar las variables de este diseño no experimental?"
A continuación, cuando el usuario responda se deberá indicar justificadamente al usuario si la respuesta es correcta o no.
´´´
\ No newline at end of file
Diseños Experimentales: En los diseños experimentales existe un grupo experimental al que se le aplica un tratamiento, y se mide la variable dependiente para comprobar si el tratamiento ha tenido algún tipo de efecto.
Variable Dependiente: tipo de variable en diseños experimentales que se evalúa para estudiar el cambio provocado por el tratamiento.
Variable Independiente: tipo de variable en diseños experimentales que se manipula a través del tratamiento aplicado al grupo experimental.
\ No newline at end of file
Diseños No Experimentales: En los diseños no experimentales se realiza una evaluación diagnóstica de la variable o variables de interés. En los diseños no experimentales nunca existe un tratamiento.
Variable Criterio: tipo de variable en diseños no experimentales. Es la principal de la investigación, relacionada con todas las demás variables.
Variables Explicativas o Predictoras: tipo de variables en diseños no experimentales. Analizan su relación con la variable criterio.
\ No newline at end of file
document.getElementById('hamburger-menu').addEventListener('click', function () {
var conversaciones = document.getElementById('conversaciones');
if (conversaciones.classList.contains('active')) {
conversaciones.classList.remove('active');
} else {
conversaciones.classList.add('active');
}
});
window.onload = function() {
var chatContainer = document.getElementById("messages-container");
chatContainer.scrollTop = chatContainer.scrollHeight;
};
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/chat.css' %}">
</head>
<body>
<div class="container">
<button class="hamburger-menu" id="hamburger-menu">&#9776;</button>
<h3>EducaIA</h3>
<div class="messages-container" id="messages-container">
{% if not messages %}
<p><strong>educaIA:</strong>
Introduce uno de los siguientes modos para practicar con ejemplos:<br>
-Diseño experimental<br>
-Diseño no experimental<br>
-Variables experimentales<br>
-Variables no experimentales<br>
-Muestreo probabilístico<br>
-Muestreo no probabilístico<br>
SE DEBE INTRODUCIR UNA DE LAS MODALIDADES ANTERIORESPARA QUE EL FUNCIONAMIENTO DE LA HERRAMIENTA SEA CORRECTO.
</p>
{% endif %}
{% for message in messages %}
<div class="{% if message.sender == 'user' %}user-message{% else %}bot-message{% endif %}">
<p><strong>{% if message.sender == 'user' %}TÚ:{% else %}educaIA:{% endif %}</strong> {{ message.content|linebreaksbr }}</p>
</div>
{% endfor %}
</div>
<div class="input-container">
<form class="formulario" method="post" action="">
{% csrf_token %}
<input type="text" name="text" class="user-input" placeholder="Escribe tu mensaje aquí...">
<button type="submit" class="button">Enviar</button>
</form>
</div>
</div>
<div class="conversaciones" id="conversaciones">
<h3>Conversaciones</h3>
<div class="content">
{{ user.username }}
<a href="{% url 'Nueva' %}">
<button class="button-conversacion">Nueva conversación</button>
</a>
{% for conversacion in conversaciones %}
<a class="conversacion" href="{% url 'Chat' conversacion.id %}"><p>{{ conversacion.fecha }}</p></a>
<a href="{% url 'Delete' conversacion.id%}">
<img src="{% static 'educaIAApp/logo/delete.png' %}" alt="delete" width="15">
</a>
{% endfor %}
</div>
<div class="footer">
<div class="logo">
<a href="{% url 'Logout' %}">
<img src="{% static 'educaIAApp/logo/logout.png' %}" alt="educaIA" width="30" title="educaIA">
</a>
</div>
<div class="user">
<a href="{% url 'Usuarios' %}">
<img src="{{ user.imagen.url }}" alt="user" width="30" title="user">
</a>
</div>
</div>
</div>
<script src="{% static 'educaIAApp/scripts/chat.js' %}"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EducaIA</title>
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/edit.css' %}">
</head>
<body>
<div class="container">
<h1>Edición Prompting: {{ filename }}</h1>
<form method="post">
{% csrf_token %}
<textarea class="editor" name="content" rows="20" cols="100">{{ content }}</textarea><br>
<button class="button" type="submit">Guardar</button>
</form>
<a href="{% url 'Prompt' %}">
<button class="button">Volver</button>
</a>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/inicio.css' %}">
</head>
<body>
<div class="container">
<div class="header">
<img src="{% static 'educaIAApp/logo/educaIA.jpg' %}" alt="educaIA" width="300" title="educaIA">
<h1>EducalA</h1>
<p>La IA de los estudiantes de Metodología de Investigación Educativa</p>
</div>
</div>
<div class="options">
<div class="com">
<p><b>Comencemos</b></p>
<a href="{% url 'Login' %}" class="login">
<button class="button">Iniciar Sesión</button>
</a>
<a href="{% url 'Registro' %}">
<button class="button">Registro</button>
</a>
</div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EducaIA</title>
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/prompt.css' %}">
</head>
<body>
<div class="container">
<h1>Lista de Prompts</h1>
<ul>
{% for file in files %}
<li>
{{ file }}
<a href="{% url 'Edit' file %}" class="elemento">
<button class="button">Editar</button>
</a>
</li>
{% endfor %}
</ul>
<a href="{% url 'Chat' %}" class="volver">
<button class="button">Volver</button>
</a>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/recuperacion.css' %}">
</head>
<body>
<div class="container">
<img src="{% static 'educaIAApp/logo/educaIA.jpg' %}" alt="educaIA" width="300" title="educaIA"><br>
<h1>EducaIA</h1>
<form class="formulario" method="post" action="">
{% csrf_token %}
<input class="mail" type="email" name="email" placeholder="Introduce tu correo"><br>
<input class="usuario" type="text" name="username" placeholder="Introduce tu usuario"><br>
<!--<a href="{% url 'Inicio' %}" class="button">Enviar nueva contraseña</a>-->
<button type="submit" class="button">Enviar nueva contraseña</button>
</form>
</div>
</body>
</html>
\ No newline at end of file
from django.test import TestCase
# Create your tests here.
from django.urls import path
from educaIAApp import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.inicio, name="Inicio"),
#path('login', views.login, name="Login"),
#path('registro', views.registro, name="Registro"),
path('recuperacion', views.recuperacion, name="Recuperacion"),
#path('confirmacion', views.confirmacion, name="Confirmacion"),
path('chat', views.chat, name="Chat"),
path('chat/<int:conversacion_id>/', views.chat, name='Chat'),
#path('usuario', views.usuario, name="Usuario"),
path('logout', views.cerrar_sesion, name="Logout"),
path('nueva', views.nueva, name="Nueva"),
path('prompt', views.prompt, name="Prompt"),
path('edit/<str:filename>/', views.edit, name="Edit"),
path('delete/<int:conversacion_id>/', views.delete, name="Delete"),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
\ No newline at end of file
"""
ASGI config for educaIAProject project.
It exposes the ASGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/
"""
import os
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'educaIAProject.settings')
application = get_asgi_application()
"""
Django settings for educaIAProject project.
Generated by 'django-admin startproject' using Django 5.0.4.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/5.0/ref/settings/
"""
import os.path
import json
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-(26e7rf4p+_+my!hy6!^^89zczcyx3v6k4rgkpu#fb3m4-l(gu'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'educaIAApp',
'users',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
ROOT_URLCONF = 'educaIAProject.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'educaIAApp/templates']
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'educaIAProject.wsgi.application'
# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
config_path = os.path.join(BASE_DIR, 'config.json')
with open(config_path) as config_file:
config = json.load(config_file)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': config['DATABASE']['NAME'],
'USER': config['DATABASE']['USER'],
'PASSWORD': config['DATABASE']['PASSWORD'],
'HOST': config['DATABASE']['HOST'],
'PORT': config['DATABASE']['PORT'],
}
}
# Password validation
# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/5.0/topics/i18n/
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'es-eu'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
AUTH_USER_MODEL = 'users.User'
# Configuración para enviar correos electrónicos utilizando el servicio SMTP de Gmail
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'magicrace8@gmail.com'
EMAIL_HOST_PASSWORD = 'vvtu weej fioa lfrs'
LOGIN_URL = ('/registro/login')
\ No newline at end of file
"""
URL configuration for educaIAProject project.
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('educaIAApp.urls')),
path('registro/', include('users.urls')),
]
"""
WSGI config for educaIAProject project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'educaIAProject.settings')
application = get_wsgi_application()
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'educaIAProject.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
from django.contrib import admin
from .models import User
# Register your models here.
admin.site.register(User)
\ No newline at end of file
from django.apps import AppConfig
class UsersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'users'
from django import forms
from .models import User
class ActualizarImagenPerfilForm(forms.ModelForm):
class Meta:
model = User
fields = ['imagen']
# Generated by Django 5.0.4 on 2024-06-10 18:34
import django.contrib.auth.models
import django.contrib.auth.validators
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('imagen', models.ImageField(default='user.png', upload_to='users')),
('grado', models.CharField(max_length=100)),
('rol', models.CharField(default='estudiante', max_length=100)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
imagen = models.ImageField(default='user.png', upload_to='users')
grado = models.CharField(max_length=100)
rol = models.CharField(default='estudiante', max_length=100)
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/login.css' %}">
</head>
<body>
<div class="container">
<img src="{% static 'educaIAApp/logo/educaIA.jpg' %}" alt="educaIA" width="300" title="educaIA">
<h1>EducaIA</h1>
<form method="post" action="">
{% csrf_token %}
<input class="usuario" type="text" name="username" placeholder="Introduce tu usuario"><br>
<input class="passwd" type="password" name="password" placeholder="Introduce tu contraseña" show-password><br>
<p><a href="{% url 'Recuperacion' %}" class="recuperacion-link">¿Has olvidado tu contraseña?</a></p>
<button type="submit" class="button">Iniciar Sesión</button>
</form>
{% if messages %}
{% for message in messages %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endfor %}
{% endif %}
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/confirmacion.css' %}">
</head>
<body>
<div class="container">
<img src="{% static 'educaIAApp/logo/educaIA.jpg' %}" alt="educaIA" width="300" title="educaIA"><br>
<h1>EducaIA</h1>
<form method="post" action="">
{% csrf_token %}
<input class="codigo" type="text" name="codigo" placeholder="Introduce tu código de confirmación"><br>
<button type="submit" class="button">Confirmar</button>
</form>
<!--<a href="{% url 'Chat' %}" class="button">Confirmar</a>-->
{% if messages %}
{% for message in messages %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endfor %}
{% endif %}
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/registro.css' %}">
</head>
<body>
<div class="container">
<img src="{% static 'educaIAApp/logo/educaIA.jpg' %}" alt="educaIA" width="300" title="educaIA">
<h1>EducaIA</h1>
<form method="post" action="">
{% csrf_token %}
<input class="email" type="email" name="email" placeholder="Introduce tu email"><br>
<input class="usuario" type="text" name="username" placeholder="Introduce tu usuario"><br>
<input class="passwd" type="password" name="password" placeholder="Introduce tu contraseña"><br>
<input class="passwd_conf" type="password" name="password2" placeholder="Confirma tu contraseña"><br>
<select class="selector" name="grado">
<option>Educación social</option>
<option>Educación infantil</option>
<option>Educación primaria</option>
<option>Pedagogía</option>
</select><br>
<button type="submit" class="button">Registrar</button>
</form>
{% if messages %}
{% for message in messages %}
<div class="alert alert-danger" role="alert">{{ message }}</div>
{% endfor %}
{% endif %}
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>EducaIA</title>
<meta charset="UTF-8">
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'educaIAApp/estilos/user.css' %}">
</head>
<body>
<div class="container">
<!--<img src="{% static 'educaIAApp/logo/../../media/user.png' %}" alt="user" width="200" title="user"><br>-->
<img src="{{ user.imagen.url }}" alt="user" width="200" height="100" title="user"><br>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="button">Actualizar imagen</button>
</form>
<h1>{{ user.username }}</h1>
<form method="post" action="">
{% csrf_token %}
<input class="nombre" type="text" name="nombre" placeholder="Introduce tu nombre"><br>
<input class="apellidos" type="text" name="apellidos" placeholder="Introduce tus apellidos"><br>
<input class="passwd" type="password" name="password1" placeholder="Introduce tu nueva contraseña"><br>
<input class="passwd2" type="password" name="password2" placeholder="Confirma tu nueva contraseña"><br>
<button type="submit" class="button">Modificar datos</button><br>
</form>
<a href="{% url 'Logout' %}">
<button class="logout">Cerrar Sesión</button>
</a><br>
{% if user.rol == 'profesor' %}
<a href="{% url 'Prompt' %}">
<button class="button-prompt">Modificar Prompting</button>
</a><br>
{% endif %}
</div>
</body>
</html>
\ No newline at end of file
from django.test import TestCase
# Create your tests here.
from django.urls import path
from users import views
from .views import RegistroView, ConfirmacionView, LoginView, UsuariosView
urlpatterns = [
path('', RegistroView.as_view(), name='Registro'),
path('confirmacion', ConfirmacionView.as_view(), name='Confirmacion'),
path('login', LoginView.as_view(), name='Login'),
path('usuarios', UsuariosView.as_view(), name='Usuarios'),
]
\ No newline at end of file
from django.conf import settings
from django.contrib.auth import authenticate, login, update_session_auth_hash
from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.mail import send_mail
from django.shortcuts import render, redirect
from django.views import View
from .forms import ActualizarImagenPerfilForm
from django.contrib import messages
from .models import User
class RegistroView(View):
def get(self, request):
#form = CustomUserCreationForm()
return render(request, "registro/registro.html")
def post(self, request):
email = request.POST.get('email')
username = request.POST.get('username')
password1 = request.POST.get('password')
password2 = request.POST.get('password2')
grado = request.POST.get('grado')
if email and grado and username and password1 and password2:
if password1 == password2:
user = User(username=username, email=email, grado=grado)
user.set_password(password1)
verification_code = default_token_generator.make_token(user)
request.session['user_data'] = {
'username': username,
'email': email,
'password': password1,
'grado': grado,
'codigo': verification_code,
}
subject = 'Verificación de correo electrónico'
message = f'{username} tu código de verificación es: {verification_code}'
from_email = settings.EMAIL_HOST_USER
recipient_list = [email]
send_mail(subject, message, from_email, recipient_list)
# Crear usuario
#usuario = User.objects.create_user(username=username, email=email, grado=grado, password=password1)
#login(request, usuario)
return redirect('Confirmacion')
else:
messages.error(request, "Las contraseñas no coinciden.")
else:
messages.error(request, "Por favor, completa todos los campos.")
return redirect('Registro')
'''
FUNCIONA
form = CustomUserCreationForm(request.POST)
if form.is_valid():
usuario = form.save()
login(request, usuario)
return redirect('Chat')
else:
return render(request, "registro/registro.html", {'form': form})
'''
class ConfirmacionView(View):
def get(self, request):
return render(request, 'registro/confirmacion.html')
def post(self, request):
codigo = request.POST.get('codigo')
print(codigo)
if codigo:
user_data = request.session.get('user_data')
print(user_data['codigo'])
if user_data:
user = User.objects.create_user(username=user_data['username'],
email=user_data['email'],
grado=user_data['grado'],
password=user_data['password'])
if codigo == user_data['codigo']:
user.is_active = True
user.save()
del request.session['user_data']
login(request, user)
return redirect('Chat')
else:
messages.error(request, "El código de confirmación no es válido")
else:
messages.error(request, "No se ha podido encontrar información asociada a este usuario")
else:
messages.error(request, "Por favor introduce un código")
return redirect('Confirmacion')
class LoginView(View):
def get(self, request):
return render(request, 'login/login.html')
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('Chat')
else:
error_message = "Nombre de usuario o contraseña incorrectos."
return redirect('Login')
class UsuariosView(LoginRequiredMixin, View):
def get(self, request):
form = ActualizarImagenPerfilForm(instance=request.user)
return render(request, 'usuario.html', {'form': form})
#return render(request, 'usuario.html')
def post(self, request):
form = ActualizarImagenPerfilForm(request.POST, request.FILES, instance=request.user)
if form.is_valid():
form.save()
if request.FILES.get('imagen'):
form.save()
return redirect('Chat')
nombre = request.POST.get('nombre')
appellidos = request.POST.get('apellidos')
password1 = request.POST.get('password1')
password2 = request.POST.get('password2')
password_updated = False
if nombre:
request.user.first_name = nombre
if appellidos:
request.user.last_name = appellidos
if password1 and password2:
if password1 == password2:
request.user.set_password(password1)
password_updated = True
request.user.save()
if password_updated:
update_session_auth_hash(request, request.user)
return redirect('Chat')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment