Este documento describe una aplicación web desarrollada con Google Apps Engine para administrar las inscripciones escolares. La aplicación consta de páginas HTML y código Python que interactúan entre sí. El código crea clases para cada página, almacena y busca datos de estudiantes, y envía correos electrónicos de confirmación. La aplicación permite inscribirse en clases, verificar los datos, buscar inscripciones y enviar notificaciones automáticas.
2. Google App :Proyecto-Web
2 Aplicacion de Google Apps:SAE
Nuestro aplicación esta hecha en el lenguaje Python y fue
realizada para la infraestructura de Google
-los recursos que utilizamos para su realización fueron
-Google engine launcher
-EasyEclipse for Python
Utilizamos 1 servidor para las imágenes
-http://tudescarga.net/upload/
Libros que nos sirvieron fueron
-Java 2 autor: Francisco Ceballos
-Dominando java script
Tutoriales
Paginas
Google engine code
http://mir.aculo.us/
3. Aplicacion de Google Apps:SAE3
Descripción de la aplicación
La aplicación tiene como objetivo inscribir a personas en especial
alumnos que quieras llevar la clase de programación web o lenguaje
de programación se pueden agregar mas clases dependiendo también
puedes hacer una búsqueda para verificar quienes están inscritos
también envía un correo atreves de una cuenta de Gmail envía la
confirmación de que la solicitud fue aprobada
Funcionamiento de la aplicación
Consta de paginas HTMLConsta de paginas HTML
Una pagina índex que es la principal de la aplicación como bienvenida
una principal que es donde esta el formulario de inscripción
Una datos que muestra los datos para verificar que estén correctos
Una pagina de inscripción donde se envían los datos ala cuenta de correos
Una pagina de búsqueda
1 carpeta donde se encuentra el css y java script
Se muestra en el orden mencionado
4. Aplicacion de Google Apps:SAE4
Tipos de archivos utilizados
Utilizamos CSS ,Java Script , python,
También consta de código realizado en python la función del código hace
que interactúen las paginas HTML .Así como también hace que se realice
la búsqueda que se envié el correo que guarde la información
CSS Que le da un estilo mas definido a los formularios
Java script que hace que funcione el relog de la pagina principal le añade
funciones que el HTML no puede se uso un prototipo que hace que el
formulario le añada la función de detectar cuando no es introducido al
campo el valor correspondiente
5. Aplicacion de Google Apps:SAE5
EXPLICACION DE LAS FUNCIONES Y ELABORACION DEL
CODIGO Y LOS ARCHIVOS NECESARIOS
6. Aplicacion de Google Apps:SAE6
Creación de un Documento .YAML
application: proyecto-web
version: 1
runtime: python
api_version: 1
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /.*
script: codigo.py
Una aplicación creada con Python App Engine debe incluir un
archivo de configuración denominado app.yaml que
especifique la manera en la que las rutas de URL se
corresponden con los controladores de solicitudes y con los
archivos estáticos. También debe contener información sobre
el código de la aplicación como, Nombre de la aplicación y el
identificador de la última versión. Es como el directorio de la
aplicación se crea en un block de notas con la extensión .yaml
7. Aplicacion de Google Apps:SAE7
Explicación del código
application: proyecto-web
version: 1
runtime: python
api_version: 1
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /.*
script: codigo.py
En application lleva el nombre la aplicación lo demás todos
los .yaml en handlers va Una lista de patrones URL y
descripciones de cómo se deben procesar. También va el
nombre de como se llamara el código nuestro código se llama
“codigo.py”
8. Aplicacion de Google Apps:SAE8
Explicación del código
import os
import datetime
import copy
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
from google.appengine.ext import search
from google.appengine.ext.webapp import template
from google.appengine.api import mail
Tenemos que importar librerías y módulos necesarios así como también los
módulos de google appengine y python
Una aplicación webapp consta de tres partes:
una o varias clases RequestHandler que procesan solicitudes y generan respuestas,
una instancia de WSGIApplication que dirige las solicitudes entrantes a los controladores en función de su URL,
una rutina principal que ejecuta WSGIApplication con un adaptador de CGI.
Los frameworks de Webapp nos facilitan el trabajo ya que los CGI son laboriosos
y lo que hace los webapp es gestionar la información para no para hacer mas fácil
la programación
También importamos las plantillas de Django, y módulos como e-mail, búsqueda
9. Aplicacion de Google Apps:SAE9
Explicación del código
class Menu(webapp.RequestHandler):
def get(self):
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
Como necesitamos hacer que interactué la aplicación creamos una clase
llamada menú o también se le puede llamar mainpage hace que se integre
índex.html y después self.response.out.write… hace que se muestre
Como necesitamos hacer que interactué la aplicación creamos una clase
llamada menú o también se le puede llamar mainpage hace que se integre
índex.html y después self.response.out.write… hace que se muestre
class Índex(webapp.RequestHandler):
def get(self):
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'principal.html')
self.response.out.write(template.render(path, template_values))
***Esta class hace visualizar el formulario de inscripciónEsta class hace visualizar el formulario de inscripción***
10. Aplicacion de Google Apps:SAE10
Explicación del código
classclass EstudianteEstudiante(search.SearchableModel):
matricula = db.StringProperty()
apellidos = db.StringProperty()
nombres = db.StringProperty()
fechaDeNacimiento = db.DateProperty()
direccion = db.StringProperty()
telefono = db.StringProperty()
ciudad = db.StringProperty()
nivel = db.StringProperty()
fecha = db.DateTimeProperty(auto_now_add=True)
correo = db.StringProperty()
Como necesitamos que se guarde la información usamos Almacenamiento
de datos Los objetos de datos incluidos en el almacén de datos de App
Engine se denominan entidades. Las entidades disponen de una o
varias propiedades, es decir, valores con denominación de uno de varios
tipos de datos compatibles, incluidos números enteros, valores de punto
flotante, cadenas, datos, datos binarios, etc.
Como necesitamos que se guarde la información usamos Almacenamiento
de datos Los objetos de datos incluidos en el almacén de datos de App
Engine se denominan entidades. Las entidades disponen de una o
varias propiedades, es decir, valores con denominación de uno de varios
tipos de datos compatibles, incluidos números enteros, valores de punto
flotante, cadenas, datos, datos binarios, etc.
La clase Model se proporciona a través del
módulo google.appengine.ext.db.
11. Aplicacion de Google Apps:SAE11
Explicación del código
classclass DatosPrincipales(webapp.RequestHandler):
def post(self):
template_values = {
'txtMatricula': self.request.get('txtMatricula'),
'txtApellidos': self.request.get('txtApellidos').upper(),
'txtNombres': self.request.get('txtNombres').upper(),
'txtFechaDeNacimiento': self.request.get('txtFechaDeNacimiento'),
'txtDireccion': self.request.get('txtDireccion').upper(),
'txtTelefono': self.request.get('txtTelefono'),
'txtCiudad': self.request.get('txtCiudad').upper(),
'txtCorreo': self.request.get('txtCorreo').lower(),
'cmbTipo': self.request.get('cmbTipo'),
}
path = os.path.join(os.path.dirname(__file__), 'datos.htmldatos.html')
self.response.out.write(template.render(path, template_values))
En esta class lo que hace es recibir lo que se escribe en el formulario del
HTML ejemplo si tu escribes 1451428 se guarda en txtMatricula es como si
fueran los contenedores de los campos del HTML Principal para eso usamos
el método POST porque se envía por la forma estándar después se
mostraran el HTML datos
En esta class lo que hace es recibir lo que se escribe en el formulario del
HTML ejemplo si tu escribes 1451428 se guarda en txtMatricula es como si
fueran los contenedores de los campos del HTML Principal para eso usamos
el método POST porque se envía por la forma estándar después se
mostraran el HTML datos
12. Aplicacion de Google Apps:SAE12
Explicación del código
defdef envia_mail(e):
para="%s %s <%s>" % (e.nombres,e.apellidos,e.correo)
cuerpo = """
COMO ESTAS QUERIDO ALUMNO : %s
APROBADA :
TU SOLICITUD PARA QUE ASISTAS A LA CLASE QUE SELECCIONASTES
A SIDO APROBADA PUEDES ASISTIR LA FECHA PROGRAMADA
NOTA:
No olvides presentarte un dia antes para que verifiques la hora y el
grupo asignado
ATENTAMENTE:Cordinador de Materia
""" % (e.nombres)
mail.send_mail(sender="rafaellopezgtz@gmail.com",to=para,subject="cordinacion",body=cuerpo)
La función mail.send_mail() envía un mensaje de correo electrónico desde
la aplicación.
La dirección From: puede ser tanto la dirección de correo electrónico de un
administrador registrado
La función mail.send_mail() envía un mensaje de correo electrónico desde
la aplicación.
La dirección From: puede ser tanto la dirección de correo electrónico de un
administrador registrado
Se importa el modulo
from google.appengine.api import mail
13. Aplicacion de Google Apps:SAE13
Explicación del código
class Guardar(webapp.RequestHandler):
def post(self):
estudiante = Estudiante()
estudiante.matricula = self.request.get('txtMatricula')
estudiante.apellidos = self.request.get('txtApellidos').upper()
estudiante.nombres = self.request.get('txtNombres').upper()
fecha = self.request.get('txtFechaDeNacimiento')
f = fecha.split('/')
estudiante.fechaDeNacimiento = datetime.date(int(f[2]),int(f[1]),int(f[0]))
estudiante.direccion = self.request.get('txtDireccion').upper()
estudiante.telefono = self.request.get('txtTelefono')
estudiante.ciudad = self.request.get('txtCiudad').upper()
estudiante.nivel = self.request.get('cmbTipo')
estudiante.escuela = self.request.get('txtEscuela').upper()
estudiante.correo = self.request.get('txtCorreo')
estudiante.put()
envia_mail(estudiante)
template_values = {
'txtApellidos': self.request.get('txtApellidos').upper(),
'txtNombres': self.request.get('txtNombres').upper(),
'txtCorreo': self.request.get('txtCorreo').lower(),
'tieneCorreo': (estudiante.correo != '')
}
path = os.path.join(os.path.dirname(__file__), 'preinscribir.html')
self.response.out.write(template.render(path, template_values))
En esta clase lo que hace es guardarnos los datos usa el método post Cada consulta
del almacén de datos utiliza un índice, una tabla que contiene los resultados de la
consulta en el orden deseado
En esta clase lo que hace es guardarnos los datos usa el método post Cada consulta
del almacén de datos utiliza un índice, una tabla que contiene los resultados de la
consulta en el orden deseado
La clase Model se proporciona a través del
módulo google.appengine.ext.db.
14. Aplicacion de Google Apps:SAE14
Explicación del código
class Buscar(webapp.RequestHandler):
def get(self):
txtFullText = self.request.get('txtFullText').upper()
if txtFullText <> '':
estudiantes = Estudiante.all().search(txtFullText)
template_values = {
'estudiantes': estudiantes
}
else:
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'buscar.html')
self.response.out.write(template.render(path, template_values))
En esta class lo que hace es buscar los datos que ingresamos en el
formulario hace una búsqueda a estudiantes dependiendo del valor que le
damos de búsqueda al campo txtfulltext que aparece en el html
En esta class lo que hace es buscar los datos que ingresamos en el
formulario hace una búsqueda a estudiantes dependiendo del valor que le
damos de búsqueda al campo txtfulltext que aparece en el html
15. Aplicacion de Google Apps:SAE15
Explicación del código
application = webapp.WSGIApplication(
[('/', Menu),
('/index', Index),
('/principal', DatosPrincipales),
'/buscar', Buscar),
('/preinscribir', Guardar)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
En nuestro objeto application debemos también indicar los nuevos
controladores
En nuestro objeto application debemos también indicar los nuevos
controladores
17. Aplicacion de Google Apps:SAE17
INTEGRANTES
Rafael López Gutiérrez
Blanca Alicia Rodríguez Rivas
Alejandro Josafat Loera Ramírez
Marco Antonio Carcini Mora
Jesús Alejandro Beltrán Reyna