Esempio n. 1
0
def pregunta_nuevo():
	try:
		Preguntas.create(
	    	competencia=request.form['competencia'], #este debe ser el ID de la competencia por cierto, es una foreignKey
	    	pregunta=request.form['pregunta'])
		return "OK!", 200
	except:
		return "Error!", 404
Esempio n. 2
0
def pregunta_nuevo():
	try:
		Preguntas.create(
	    	competencia=request.form['competencia'], #este debe ser el ID de la competencia por cierto, es una foreignKey
	    	pregunta=request.form['pregunta'])
		return "OK!", 200
	except:
		return "Error!", 404
Esempio n. 3
0
def pregunta_actualizar(id):
	try:
		pregunta = Preguntas.update(
	    	competencia=request.form['competencia'], #aqui igual, esta es la ID de la competencia
	    	pregunta=request.form['pregunta']).where(Preguntas.id == id)
		Preguntas.execute()
		return "OK!", 200
	except:
		return "Error!", 404
Esempio n. 4
0
def pregunta_actualizar(id):
	try:
		pregunta = Preguntas.update(
	    	competencia=request.form['competencia'], #aqui igual, esta es la ID de la competencia
	    	pregunta=request.form['pregunta']).where(Preguntas.id == id)
		Preguntas.execute()
		return "OK!", 200
	except:
		return "Error!", 404
Esempio n. 5
0
 def validate_num_preguntas(self, field):
     """ Function to verify that there are enough questions of the subject and type given to generate the exam """
     asignatura = Asignaturas.objects(asignatura=self.asignatura.data).first()
     tipo = self.tipo_examen.data
     num_preguntas = self.num_preguntas.data
     preguntas = Preguntas.user_objects(asignatura=asignatura.get_id(), tipo=tipo).count()
     if preguntas < num_preguntas:
         raise validators.ValidationError(u'No existen suficientes preguntas de la asignatura para el tipo indicado.')
Esempio n. 6
0
def pregunta_borrar(id):
	try:
		pregunta = Preguntas.select().where(Preguntas.id == id)
		if pregunta is not None:
			pregunta[0].delete()
			return "OK!", 200
		else:
			return "Error!", 404
	except:
		return "Error!", 404
Esempio n. 7
0
def pregunta_borrar(id):
	try:
		pregunta = Preguntas.select().where(Preguntas.id == id)
		if pregunta is not None:
			pregunta[0].delete()
			return "OK!", 200
		else:
			return "Error!", 404
	except:
		return "Error!", 404
Esempio n. 8
0
 def validate_num_preguntas(self, field):
     """ Function to verify that there are enough questions of the subject and type given to generate the exam """
     asignatura = Asignaturas.objects(
         asignatura=self.asignatura.data).first()
     tipo = self.tipo_examen.data
     num_preguntas = self.num_preguntas.data
     preguntas = Preguntas.user_objects(asignatura=asignatura.get_id(),
                                        tipo=tipo).count()
     if preguntas < num_preguntas:
         raise validators.ValidationError(
             u'No existen suficientes preguntas de la asignatura para el tipo indicado.'
         )
Esempio n. 9
0
def init_ddbb():
    # Check that the admin user not exist
    num = Usuarios.objects(usuario="admin").count()

    if num == 0:        
        # the "admin" user is saved as a teacher and a student test
        admin = Usuarios(nombre="admin", apellidos="", usuario="admin", password="******", email="*****@*****.**", tipo=0, activado=True)
        admin.save(clean=False)
        profe = Usuarios(nombre="profesor", apellidos="", usuario="profesor1", password="******", email="*****@*****.**", tipo=1, activado=True)
        profe.save(clean=False)
        alumno = Usuarios(nombre="alumno", apellidos="", usuario="alumno1", password="******", email="*****@*****.**", tipo=2, activado=True)
        alumno.save(clean=False)

        # test records    
        asignaturas = ["Seguridad en las comunicaciones", "Sistemas Distribuidos", "Redes", "Procesadores del lenguaje", "Inteligencia Artificial"]
      
        temas = [ 
            (u"El problema de la seguridad", u"La seguridad en los elementos físicos", u"Defensa básica ante ataques"),
            (u"Fundamentos de los S.D.", u"Comunicación entre procesos", u"Servicios de archivos distribuidos"),
            (u"Conceptos básicos de redes", "Redes de área local y área metropolitana", "Redes de área extensa", "Redes de acceso"),
            (u"Introducción", u"Analisis Lexico", u"Analisis sintáctico"),
            (u"Introducción a la IA", u"Lógica", u"Sistemas Expertos")
            ]
            
        op_seg1 = Opciones(letra="A", texto=u"Se debe comprar las mejores herramientas de seguridad disponibles en el mercado y formar a todo el personal en su uso")
        op_seg2 = Opciones(letra="B", texto=u"Se debe contratar al hacker de más prestigio de la comunidad informática y hacerle responsable de la seguridad")
        op_seg3 = Opciones(letra="C", texto=u"Se debe confiar en la suerte y hacer lo que pueda")
        op_seg4 = Opciones(letra="D", texto=u"No hay manera de evitarlos completamente")
        op_seg5 = Opciones(letra="A", texto=u"Debe ser completamente secreta, excepto para un grupo de élite")
        op_seg6 = Opciones(letra="B", texto=u"Debe incluir mecanismos de respuesta, frente a posibles ataques")
        op_seg7 = Opciones(letra="C", texto=u"Debe conseguir que los usuarios no tengan que conocerla")
        op_seg8 = Opciones(letra="D", texto=u"Debe cubrir solo los aspectos de sistemas operativos de la organización")
        op_seg9 = Opciones(letra="A", texto=u"Un sistema que permite, en tiempo real, detectar determinados tipos de ataques y alertar sobre ellos, a la vez que, en algunos casos, puede pararlos.")
        op_seg10 = Opciones(letra="B", texto=u"Un sistema cerrado de TV, que consigue detectar a cualquier ladrón informático que trate de penetrar en la organización.")
        op_seg11 = Opciones(letra="C", texto=u"Un sistema de localización de posibles atacantes en internet.")
        op_seg12 = Opciones(letra="D", texto=u"Un sistema que permite conocer cualquier envío no deseado de información por las redes de comunicaciones.")
        op_seg13 = Opciones(letra="A", texto=u"Porque implementan hasta el nivel 3 de la arquitectura OSI, y los hubs solo hasta el nivel 1.")
        op_seg14 = Opciones(letra="B", texto=u"No son necesariamente más seguros. Depende de su configuración concreta.")
        op_seg15 = Opciones(letra="C", texto=u"Tienen mecanismos físicos de seguridad adicionales.")
        op_seg16 = Opciones(letra="D", texto=u"Son más seguros los hubs, al no tener ninguna configuración especial que hacer en ellos.")
        op_seg17 = Opciones(letra="A", texto=u"Redes locales montadas en secreto, basándose en técnicas criptográficas secretas.")
        op_seg18 = Opciones(letra="B", texto=u"Grupos de ordenadores, relacionados lógicamente entre sí, por un número de grupo (o de VLAN) y configurados por el administrador de un conmutador.")
        op_seg19 = Opciones(letra="C", texto=u"Grupos de ordenadores en distintas redes IP, en distintas situaciones geográficas, dependientes de distintos encaminadores y conmutadores.")
        op_seg20 = Opciones(letra="D", texto=u"Un nuevo desarrollo de seguridad, probado únicamente como piloto, en el MIT.")
        op_seg21 = Opciones(letra="A", texto=u"Acceder a él mediante ssh o telnet, que ofrece, además, las mejores prestaciones de velocidad.")
        op_seg22 = Opciones(letra="B", texto=u"Acceder a él mediante http, al poderse usar criptografía SSL.")
        op_seg23 = Opciones(letra="C", texto=u"Depende en cada caso cómo esté configurado. No hay una solución claramente más segura que otra.")
        op_seg24 = Opciones(letra="D", texto=u"No puede accederse remotamente.")
        op_seg25 = Opciones(letra="A", texto=u"El programa que controla toda la seguridad del sistema operativo.")
        op_seg26 = Opciones(letra="B", texto=u"El nombre que recibe el centro físico del ordenador.")
        op_seg27 = Opciones(letra="C", texto=u"La parte del sistema operativo que controla la administración de recursos.")
        op_seg28 = Opciones(letra="D", texto=u"Una nueva aplicación de seguridad para Windows.")
        op_seg29 = Opciones(letra="A", texto=u"Verdadero, hoy en día cualquiera puede hacerlo.")
        op_seg30 = Opciones(letra="B", texto=u"Falso, depende de qué sistema de ficheros. Por ejemplo, FAT no puede hacerlo.")
        op_seg31 = Opciones(letra="C", texto=u"Falso, el sistema de ficheros nunca se ocupa de estos asuntos.")
        op_seg32 = Opciones(letra="D", texto=u"Verdadero, pero además, depende de la gestión de usuarios.")
        op_seg33 = Opciones(letra="A", texto=u"4 clases distintas: sólo IP, mensajes de aplicaciones con transporte TCP, de aplicaciones con transporte UDP y de protocolos del mismo nivel 3.")
        op_seg34 = Opciones(letra="B", texto=u"3 clases distintas: mensajes de aplicaciones con transporte TCP, de aplicaciones con transporte UDP y de protocolos del mismo nivel 3.")
        op_seg35 = Opciones(letra="C", texto=u"2 clases distintas: mensajes de aplicaciones con transporte TCP y de aplicaciones con transporte UDP.")
        op_seg36 = Opciones(letra="D", texto=u"Muchas clases distintas, dependiendo de la aplicación y el protocolo de encaminamiento.")

        preguntas = [
            (
                (   (u"Para evitar completamente cualquier tipo de ataque informático a los sistemas:", 1, (op_seg1, op_seg2, op_seg3, op_seg4), "D"),
                    (u"La política de seguridad de una organización debe tener alguna de las siguientes características:", 1, (op_seg5, op_seg6, op_seg7, op_seg8), "B"),
                    (u"En el contexto de seguridad de las comunicaciones, un sistema de detección de intrusiones es:", 1, (op_seg9, op_seg10, op_seg11, op_seg12), "A"),
                ),
                (   (u"Los encaminadores son máquinas más seguras que los hubs por:", 1, (op_seg13, op_seg14, op_seg15, op_seg16), "D"),
                    (u"Las VLAN (redes de área local virtuales) son:", 1, (op_seg17, op_seg18, op_seg19, op_seg20), "B"),
                    (u"Para la gestión remota de un encaminador o de un conmutador siempre es más seguro:", 1, (op_seg21, op_seg22, op_seg23, op_seg24), "C"),
                ),
                (   (u"El kernel del sistema operativo es:", 1, (op_seg25, op_seg26, op_seg27, op_seg28), "C"),
                    (u"La seguridad de los datos frente a accesos no autorizados la garantiza cualquier sistema de ficheros de cualquier sistema operativo:", 1, (op_seg29, op_seg30, op_seg31, op_seg32), "B"),
                    (u"Los mensajes IP pueden ser de:", 1, (op_seg33, op_seg34, op_seg35, op_seg36), "B"),
                )
            ),
            (
                (   (u"La computación móvil es la realización de tareas de cómputo mientras el usuario está en movimiento o en otro lugar distinto a su entorno habitual.", 2, True),
                    (u"La computación ubicua requiere que los dispositivos estén fuera de su entorno habitual", 2, False),
                    (u"Un servicio es la parte de un sistema de computadores que gestiona una colección de recursos relacionados y presenta una funcionalidad a los usuario y aplicaciones.", 2, True),
                    (u"El servidor es quien interpreta el texto HTML y el navegador es quien informa al servidor sobre el tipo de contenido que devuelve.", 2, False),
                    (u"El propósito de un URL es identificar un recurso de tal forma que permita al navegador localizarlo en los servidores web.", 2, True)
                ),
                (   (u"La comunicación usando UDP adolece de fallos por omisión.", 2, True),
                    (u"La comunicación usando TCP garantiza la entrega ordenada del mensaje.", 2, True),
                    (u"Sun RPC implementa el modelo de programación basado en invocación a un método remoto.", 2, False)
                ),
                (   (u"Los sistemas de archivos no son responsables de la protección de los archivos.", False),
                    (u"En un sistema de archivos distribuido, los cambios en un archivo por un cliente no deben interferir con la operación de otros clientes que acceden o cambian simultáneamente el mismo archivo.", 2, True),
                    (u"En un sistema de archivos distribuido, un archivo puede estar representado por varias copias de su contenido en diferentes ubicaciones.", 2, True),
                    (u"En AFS se tranfieren archivos completos entre los computadores del servidor y del cliente y haciendo caché de ellos entre los servidores hasta que el cliente reciba una versión más actualizada.", 2, False)
                )                
            ),
            (
                (   
                ),
                (   (u"¿Qué longitud máxima de cable UTP de Categoría 5 recomendaría para operar a una velocidad de 100 Mbps?", 0),
                    (u"Un cable STP de 2 pares se utiliza para transportar señales telefónicas, ¿cómo realizaría la instalación de una red de área local que operase a una velocidad de 10 Mbps", 0),
                ),
                (   (u"En una red Frame Relay indique los procedimientos que conoce para recuperación de la congestión.", 0),
                    (u"En su opinión, ¿las capas 4-7 del MR-OSI resultan muy afectadas po RDSI?", 0),
                ),
                (   (u"Indique las velocidades que se pueden obtener en una conexión ADSL, en función de los parámetros clave que las determinan.", 0),
                    (u"Describa el estado de la normalización en las redes de cable, y analice los organismos que participan en la realización de especificaciones.", 0),
                    (u"Describa los componentes, funciones y operación de una red de cable.", 0),
                    (u"Exprese cuáles son las características principales de un acceso LMDS.", 0)
                ),
            ),
            (
                ( ),
                ( ),
                ( )
            ),
            (
                ( ),
                ( ),
                ( )
            )
            ]

        lista_asignaturas = []
        for i in range(len(asignaturas)):
            asignatura = Asignaturas()
            asignatura.asignatura = asignaturas[i]
            asignatura.save()

            lista_asignaturas.append(asignatura)

            num_pregunta = 1
            
            for j in range(len(temas[i])):
                tema = Temas()
                tema.num = j+1
                tema.descripcion = temas[i][j]
                tema.asignatura = asignatura
                tema.usuario = profe
                tema.save()                
                
                for k in range(len(preguntas[i][j])):
                    pregunta = Preguntas()
                    pregunta.num = num_pregunta
                    pregunta.texto = preguntas[i][j][k][0]
                    pregunta.tema = tema
                    pregunta.tipo = preguntas[i][j][k][1]
                    
                    if pregunta.tipo == 1:
                        for opcion in preguntas[i][j][k][2]:
                            pregunta.opciones.append(opcion)
                        pregunta.correcta = preguntas[i][j][k][3]
                    
                    if pregunta.tipo == 2:
                        pregunta.verdadera = preguntas[i][j][k][2]
                        
                    pregunta.asignatura = asignatura
                    pregunta.usuario = profe
                    pregunta.save()
                    
                    num_pregunta = num_pregunta + 1

        profe.asignaturas = lista_asignaturas
        profe.save(clean=False)
        alumno.asignaturas = lista_asignaturas
        alumno.save(clean=False)
Esempio n. 10
0
def genera_examen_view():
    """
    Function for generating random tests
    """    
    form = GeneraExamenForm(request.form)   

    asig=login.current_user.get_asignaturas()
    if not asig:
        msg_error = u"El usuario no tiene actualmente asignada ninguna asignatura, por lo que no \
        es posible generar exámenes de forma automática."
        return render_template('error/error_msg.html', error=msg_error)
    form.asignatura.choices = [(g.asignatura, g.asignatura) for g in asig]
    
    # the form  has already completed    
    if request.method == 'POST' and form.validate():        
        asignatura = Asignaturas.objects(asignatura=form.asignatura.data).first()
        tipo = form.tipo_examen.data
        
        lista_preguntas = Preguntas.user_objects(asignatura= asignatura.get_id(), tipo=tipo)
        num_preguntas = form.num_preguntas.data
        nombre = form.nombre.data
        
        examen = Examenes(nombre=nombre, asignatura=asignatura, publico=form.publico.data, usuario=login.current_user.get_id())

        # Random mode    
        if form.modo.data==0:
            # the necessary questions randomly selected from the list of questions            
            lista_preguntas = random.sample(lista_preguntas, num_preguntas)

        # mode = "questions by chapter"
        else:
            lista = []
            lista_preguntas = []
            lista_temas = Temas.user_objects(asignatura = asignatura.get_id())
            num_temas = len(lista_temas)
            
            # A list of questions is created for each chapter and randomly rearranges
            # and are included as well in another list
            for tema in lista_temas:
                preguntas = Preguntas.user_objects(asignatura= asignatura.get_id(), tipo=tipo, tema=tema)
                preguntas = random.sample(preguntas, len(preguntas))
                lista.append(preguntas)
            random.shuffle(lista)
            
            # Questions are selected from the random list until the total number needed
            indice = 0  
            ind = 0
            while num_preguntas > 0:
                if len(lista[indice]) > 0:
                    lista_preguntas.insert(ind, lista[indice].pop())
                    ind = ind + 1

                    num_preguntas = num_preguntas -1
            
                if indice < num_temas-1:
                    indice = indice + 1
                else:
                    indice = 0
                                        
        examen.preguntas = lista_preguntas
        examen.save(clean=False)

        return render_template('exams/gen_exa_ok.html', asignatura=asignatura, nombre=nombre, preguntas=lista_preguntas, tipo=tipo)
    
    # the form is displayed to complete
    return render_template('exams/gen_exa.html', form=form)
Esempio n. 11
0
def pregunta_info(id):
	try:
		pregunta = Preguntas.select().where(Preguntas.id == id)
		return json.dumps(pregunta[0].to_json()), 200
	except:
		return "Error!", 404
Esempio n. 12
0
def preguntas_all():
	preguntas = Preguntas.select()
	lista_preguntas = [Preguntas.to_json() for pregunta in preguntas]
	return json.dumps(lista_preguntas)
Esempio n. 13
0
def pregunta_info(id):
	try:
		pregunta = Preguntas.select().where(Preguntas.id == id)
		return json.dumps(pregunta[0].to_json()), 200
	except:
		return "Error!", 404
Esempio n. 14
0
def preguntas_all():
	preguntas = Preguntas.select()
	lista_preguntas = [Preguntas.to_json() for pregunta in preguntas]
	return json.dumps(lista_preguntas)
Esempio n. 15
0
def cargarpregunta():
    pregunta = Preguntas()
    pregunta.enunciado = "Pregunta 1 Prueba 1"
    pregunta.prueba_id = "1"

    db.session.add(pregunta)
    db.session.commit()

    pregunta = Preguntas()
    pregunta.enunciado = "Pregunta 2 Prueba 1"
    pregunta.prueba_id = "1"

    db.session.add(pregunta)
    db.session.commit()

    pregunta = Preguntas()
    pregunta.enunciado = "Pregunta 3 Prueba 1"
    pregunta.prueba_id = "1"

    db.session.add(pregunta)
    db.session.commit()

    pregunta = Preguntas()
    pregunta.enunciado = "Pregunta 1 Prueba 2"
    pregunta.prueba_id = "2"

    db.session.add(pregunta)
    db.session.commit()

    pregunta = Preguntas()
    pregunta.enunciado = "Pregunta 2 Prueba 2"
    pregunta.prueba_id = "2"

    db.session.add(pregunta)
    db.session.commit()

    print("Preguntas Creadas")