You are on page 1of 206

UNIVERSIDAD TCNICA DE MACHALA FACULTAD DE INGENIERA CIVIL ESCUELA DE INFORMTICA

CARRERA DE INGENIERA DE SISTEMAS

PORTAFOLIO DE:

PROGRAMACIN EN RED
CURSO 8VO. SEMESTRE PARALELO B (PROMOCION#. 10)

ESTUDIANTE RESPONSABLE

TORO LOPEZ ERIKA ANABEL


DOCENTE RESPONSABLE

ING. MARIUXI PAOLA ZEA ORDOEZ, MG. SC.

PERIODO 2013 - 2014

MACHALA EL ORO ECUADOR

UNIVERSIDAD TCNICA DE MACHALA


FACULTAD DE INGENIERA CIVIL CARRERA DE INGENIERA DE SISTEMAS

SYLLABUS ESTANDARIZADO
1.- DATOS GENERALES
Asignatura: PROGRAMACIN EN RED Eje Curricular de la Asignatura: PROFESIONAL Horas presenciales teora: 2 horas de clases tericas por semana / 40 horas Semestrales. Horas presenciales prctica: 3 horas de clase presenciales en laboratorios o en el campo por semanas / 40 horas Semestrales. Horas atencin a estudiantes: Cdigo de la Asignatura: IS801 Ao: 2013 - 2014 Ciclo/Nivel: 8vo. Semestre

Nmero de crditos: 5 (CINCO)

Horas trabajo autnomo: 5 horas semanales / 80 horas semestrales

Fecha de Inicio: 7/Octubre/2013 Prerrequisitos: IS702 Programacin III Correquisitos:

Fecha de Finalizacin: 28/Febrero/2014

2.- JUSTIFICACION DE LA ASIGNATURA Programacin en Red es una asignatura de aplicacin prctica y tcnica perteneciente al eje profesional de los Ingenieros de Sistemas, que sirve para la elaboracin de software los cuales se encuentran intercomunicados por una infraestructura de red informtica, es decir, mediante el desarrollo de aplicaciones cliente-servidor; por lo que est orientada para que el estudiante sea capaz de: disear e implementar sistemas que facilite la

comunicacin entre un dispositivo y otro, sea un dispositivo mvil, computador de escritorio, Tablet o porttil, mediante un lenguaje de programacin actual como Python y un Framework Web como Django.

3.- OPERACIONALIZACION DE LA ASIGNATURA CON RESPECTO A LAS COMPETENCIAS DEL PERFIL PROFESIONAL 3.1 Objeto de estudio de la asignatura El Objeto de estudio de la asignatura son: el desarrollo de software cliente servidor, uso de diferentes lenguajes de programacin. 3.2 Competencia de la asignatura Analizar, Disear e implementar Sistemas Cliente - Servidor 3.3 Relacin de la asignatura con los resultados de aprendizaje
RESULTADOS DEL APRENDIZAJE CONTRIBUCIN (alta, media, baja) EL ESTUDIANTE DEBE:

a) Habilidad para aplicar el conocimiento de las Ciencias Bsicas de la profesin b) Pericia para disear y conducir experimentos, as como para analizar e interpretar datos. c) Destreza para el manejar procesos de Ingeniera de Sistemas d) Trabajo multidisciplinario. e) Resuelve problemas Ingeniera de Sistemas. f) Comprensin de responsabilidades profesionales y ticas g) Comunicacin efectiva de

ALTA

Aplicar tcnicas de lgica en la resolucin de problemas que involucren el proceso de desarrollo de software. Entender la utilizacin de los diferentes tipos de conexiones de red informtica para la elaboracin de programas en red. Desarrollar tcnicas para la reutilizacin de cdigo fuente en una aplicacin de red. Integrar y colaborar en el desarrollo del proyecto de Software en diferentes reas. Identificar los diferentes protocolos de comunicacin entre los principales lenguajes de programacin conectados en una red informtica. Respetar la autora de cdigo fuente

MEDIA

ALTA

BAJA

ALTA

sus

BAJA Utilizar un lenguaje simplificado, ordenado y estructurado para explicar y exponer informes tcnicos de aplicaciones en red. Identificar el uso de lenguajes de programacin en red analizando la necesidad de empresa.

ALTA

h) Impacto en la profesin y en el contexto social

MEDIA

i) Aprendizaje para la vida

BAJA

Practicar la investigacin para comprender la necesidad de seguir capacitndose continuamente. Analizar problemas de actualidad y ms comunes del negocio, que se resuelvan con software en red.

j) Asuntos contemporneos

BAJA

k) Utilizacin de tcnicas instrumentos modernos l) Capacidad gestionar proyectos

BAJA

Conocer nuevas metodologas y tcnicas de programacin para la elaboracin de software en red Dirigir grupos de trabajo, liderando su rea de mayor competencia con empata.

para liderar, o emprender

BAJA

3.4 Proyecto o producto de la asignatura: Los estudiantes elaborarn un trabajo o proyecto de aplicacin de la asignatura en el desarrollo de un software en red para una empresa de la localidad abarcando de preferencia instituciones pblicas. El proyecto de investigacin estar orientado en la participacin, colaboracin y cooperacin de grupos de programacin, utilizando Trabajo Colaborativo (Collaborative Work), Redes sociales (Social Networking), Folksonomies, tales como: Google Drive, Dropbox entre otros. 4.- PROGRAMA DE ACTIVIDADES: Comprende el listado del contenido o programa del curso, indicando: 4.1 Estructura de la asignatura por unidades:
UNIDAD I. FUNDAMENTOS DE LA PROGRAMACIN EN RED COMPETENCIAS 1.- Identificar los objetivos de la programacin en Red. 2.- Identificar los elementos de una arquitectura de red informtica. 1.- Establecer diferencia entre los protocolos WWW 2.- Comprender los ambientes de desarrollo Web 3.- Desarrollar grficas Web. III. PROGRAMACIN AVANZADA CON DJANGO interfaces RESULTADOS DE APRENDIZAJE 1.- Establece las diferencias entre la programacin de aplicaciones de escritorio y aplicaciones en red. 2.- Identifica los elementos que intervienen en la comunicacin entre sistemas informticos.

II. INTRODUCCIN A LA PROGRAMACIN CON DJANGO

1.- Identifica los protocolos www y su forma de aplicacin. 2.- Utiliza plantillas para desarrollo de interfaces grficas. 3.- Utiliza Django para interactuar con una Base de Datos 1.- Crea servicios Web 2.- Implementa la seguridad en los servicios Web

1.- Gestionar la seguridad de las aplicaciones en red 2.- Implementar servicios Web

3.- Genera contenido no HTML.

4.2 Estructura detallada por temas:


UNIDAD I: FUNDAMENTOS DE LA PROGRAMACIN EN RED
SEMANAS DE ESTUDIO

TEMAS

CONTENIDOS

ESTRATEGIAS DE APRENDIZAJE

HORAS

1.07/10/13 11/10/13

Introduccin Django

1.1. Diagnstico. 1.2. FrameWork Web. 1.3. Patrn de diseo MVC 1.4. Evolucin de Django.

Investigaciones para profundizar los temas.

Elaboracin de un cuadro comparativo acerca de las caractersticas, ventajas y desventajas de frameworks Django, Web2Py y PyCharm. Investigaciones para profundizar los temas. 5

2.14/10/13 18/10/13

Empezando con la programacin en Django

1.5. Instalacin de Python. 1.6. Instalacin de Django. 1.7. Comenzar un proyecto

Elaboracin de un ensayo acerca de la instalacin de los siguientes frameworks: Django, Web2Py y PyCharm. 10

TOTAL DE HORAS DE UNIDAD I

UNIDAD II: INTRODUCCIN A LA PROGRAMACIN CON DJANGO


SEMANAS DE ESTUDIO

TEMAS

CONTENIDOS

ESTRATEGIAS DE APRENDIZAJE

HORAS

3.21/10/13 26/10/13

Principios de las pginas Web dinmicas.

2.1.Contenido dinmico 2.2.Mapeando URLs a Vistas 2.3. Errores 404. 2.4. URLs dinmicas

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos los principios de las pginas Web dinmicas.

4.28/10/13 02/11/13

El Sistema de plantillas de Django

2.5. Sistema Bsico de plantillas 2.6. Empleo y Etiquetas bsicas de plantillas y filtros 2.7. uso de plantillas en las vistas

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el sistema de plantillas de Django.

2.8. Cargadores de plantillas 5.04/11/13 09/11/13 Interactuar con una base de dato: Modelos 2.9. Consulta a la base de datos en las vistas 2.10. El patrn de diseo MTV 2.11. Configuracin de la base de datos 2.12. Manejo de modelos 6.11/11/13 16/11/13 Sitio de Administracin Django 2.13. Activar y Usar la interfaz de administracin 2.14. Personalizar la interfaz de administracin. Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos la configuracin del sitio de Administracin de Django Ejercicios de laboratorio 7.18/11/13 23/11/13 Procesamiento de formularios 2.15. Bsquedas 2.16. Creacin de un formulario para comentarios 2.17. Procesamiento de datos 2.18. Reglas de validacin. 8.25/11/13 30/11/13 Vistas Avanzadas URLconfs 2.19. Trucos de URLconf 2.20. Incluyendo otras URLconfs 02/12/13 07/12/13 09/12/13 14/12/13 9.16/12/13 21/12/13 Vistas Genricas 2.21. Usar vistas genricas Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos las vistas Avanzadas EXAMEN DEL HEMISEMESTRE 5 Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de formularios Ejercicios de laboratorio 5 5 Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos cmo interactuar con las bases de datos Ejercicios de laboratorio 5

CONCURSO DE PROGRAMACION, REDES DE DATOS Y EXPOFERIA Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. 5

2.22. genricas objetos

Vistas de

Exposiciones grupales para explicar con ejemplos las vistas genricas. Ejercicios de laboratorio

2.23. Extender las vistas genricas. TOTAL DE HORAS DE UNIDAD I 35

UNIDAD III: PROGRAMACIN AVANZADA CON DJANGO


SEMANAS DE ESTUDIO

TEMAS

CONTENIDOS

ESTRATEGIAS DE APRENDIZAJE

HORAS

10.23/12/13 28/12/13

Extender sistema plantillas

el de

3.1. Revisin del lenguaje de plantillas 3.2. Detalles internos de la carga de plantillas 3.3. Escribir cargadores de plantillas personalizados. 3.4. Configurar el sistema de plantillas en modo autnomo.

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos la extensin del sistema de plantillas. Ejercicios de laboratorio

11.30/12/13 04/01/14

Generacin contenido HTML

de no

3.5. Vistas y tipo MIME. 3.6. Produccin CSV 3.7. Generar PDFs 3.8. Otros Frameworks: Feeds de Sindicacin y Sitemap.

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos la generacin de contenido no HTML Ejercicios de laboratorio

12.06/01/14 11/01/14

Sesiones, usuario e inscripciones

3.9. Cookies 3.10. Entorno de sesiones 3.11. Usuarios e identificaciones

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de usuarios y privilegios.

3.12. Permisos, grupos, mensajes y perfiles. 3.13. Integracin con una base de datos existente 3.14. Integracin con un sistema de autentificacin. 3.15. Integracin con aplicaciones web existentes. 13.13/01/14 18/01/14 Seguridad 3.16. Seguridad en la Web 3.17. Inyeccin de SQL 3.18. Cross-Site Request Forgery 3.19. Session Forging/Hijacking 14.20/01/14 25/01/14 Puesta en marcha de Django en un servidor 3.20. Usando Django con Apache y mod_python 3.21. Django FastCGI Usando con

Exposiciones grupales para explicar con ejemplos la integracin con bases de datos y aplicaciones existentes. Ejercicios de laboratorio

Integracin con Base de Datos y aplicaciones existentes

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de la seguridad. Ejercicios de laboratorio

Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos la puesta en marcha de Django. Ejercicios de laboratorio

3.22.Escalamiento 15.27/01/14 01/02/14 16.03/02/14 08/02/14 Proyecto 4.8. Desarrollo de un proyecto dirigido 4.9. Defensa de Proyectos Prctica de Laboratorio 5

Proyecto

Presentacin de un informe tcnico escrito y presentacin oral sobre la solucin del diseo de base de datos para la institucin seleccionada. RECUPERACIN PREPARACIN FINALES DE DE CLASES Y EXAMENES

10/02/14 15/02/14

17/02/14 22/02/14

EXAMEN FIN DE SEMESTRE

24/02/14 01/03/14

EXAMEN DE MEJORAMIENTO TOTAL DE HORAS DE UNIDAD I

SUSPENSO

35

5.- METODOLOGIA: (ENFOQUE METODOLOGICO) 5.1. Mtodos de enseanza De acuerdo a la temtica propuesta, las clases y las actividades sern: a) Clases magistrales, donde se expondrn los temas de manera terica, mostrando y analizando ejemplos. b) Trabajo en grupo, para elaborar los elementos de la literatura cientfica (fichas, citas y referencias bibliogrficas), como recurso operativo para elaborar el documento cientfico. c) Trabajo autnomo u horas no presenciales, que ser el material bsico para estructurar la carpeta del estudiante (o cuaderno) al que se agregar el trabajo en grupo: 1. Tareas estudiantiles, los trabajos bibliogrficos semanales de tipo individual, adems de resmenes, mapas conceptuales, mapas mentales, cuadros sinpticos, lneas de tiempo, ensayos, entre otros. 2. Investigaciones bibliogrficas, individuales o por grupos sobre profundizacin de temas a tratarse. 3. Trabajos de campo, realizados individual o grupalmente, donde realizan investigacin, recopilacin de datos acerca de los procesos y datos de la empresa para estructurar esquemas de base de datos. d) Formas organizativas de las clases, los alumnos asistirn a clase con el material gua (libro) adelantando la lectura del tema de clase de acuerdo a la instruccin previa del docente, sobre los puntos sobresalientes o trascendentales que se van a exponer. De estos anlisis saldrn los trabajos bibliogrficos que debern desarrollar y entregar posteriormente. e) Medios tecnolgicos que se utilizaran para la enseanza:

Pizarrn para tiza lquida y marcadoresde varios colores. Libros y revistas de la biblioteca. Internet y material de Webs. Equipo de proyeccin multimedia y material acadmico en Power Point. Aplicaciones (Python, Django, PyCharm) Aula Virtual

6.- COMPONENTE INVESTIGATIVO DE LA ASIGNATURA: Investigacin Formativa.- Referida al aprendizaje por descubrimiento y construccin del conocimiento por parte de los estudiantes. Este mtodo consiste en que el profesor a partir de una situacin problmica, logra que el estudiante busque, indague, y encuentre situaciones similares, as mismo que haga revisiones de literatura, (bibliografa, cdigos y especificaciones) recoja datos, los organice, interprete y encuentre soluciones a las dificultades planteadas por los profesores. 7. PORTAFOLIO DE LA ASIGNATURA Durante el desarrollo de la actividad acadmica el estudiante construir un Portafolio que comprende la evidencia de dichas actividades. El portafolio de la asignatura contendr la siguiente informacin Cartula Syllabus Diario Metacogniyivo Tareas en clase Tareas extraclase, tales como Mapa Conceptuales, Mapa mentales, lneas de tiempo, Cuadro comparativo, Ensayos, Cuadro sinptico, Glosarios. Evaluaciones parciales de cada unidad Evaluacin final Evidencia de eventos investigativos (Informe Proyecto Final de la asignatura). Apuntes relevantes (Resumen de las clases)

8. EVALUACIN La evaluacin ser diagnstica, formativa y sumativa, considerndolas necesarias y complementarias para una valoracin global y objetiva de lo que ocurre en la situacin de enseanza y aprendizaje. Los alumnos sern evaluados con los siguientes parmetros, considerando que la calificacin de los exmenes finales de cada parcial correspondern al 30% de la valoracin total, el restante 70% se lo debe distribuir de acuerdo a los dems parmetros, utilizando un mnimo de cinco parmetros. 8.1 Evaluaciones Parciales: Pruebas parciales dentro del proceso, determinadas con antelacin en las clases. Presentacin de informes escritos como producto de investigaciones bibliogrficas. Participacin en clases a partir del trabajo autnomo del estudiante; y, participacin en prcticas de laboratorio y de campo de acuerdo a la pertinencia en la asignatura. 8.2 Exmenes: Examen Final, al finalizar todas las unidades, en la semana No. 17, los estudiantes rendirn un examen final.

8.3 Parmetros de Evaluacin:

PORCENTAJES PARAMETROS DE EVALUACION


1er. PARCIAL

Pruebas parciales dentro del proceso Presentacin de informes escritos Investigaciones bibliogrficas Participacin en clase Trabajo autnomo Prcticas de laboratorio Prcticas de campo Exmenes Finales Total

20 10 10 10 10 10 30 100

9. BIBLIOGRAFA

9.1. Bibliografa Bsica: HOLOVATY, A; KAPLAN-MOSS, J. 2012. La Gua Definitiva de Django. Editorial Apress. Estados Unidos. 9.2. Bibliografa Complementara: SUMMERFIELD, M. 2010. Python 3. Editorial Anaya Multimedia, Madrid, Espaa. FERNANDEZ, A. 2012. Python 3 al descubierto. Editorial RC Libros. Madrid, Espaa.

9.3. Pginas WEB (webgrafa) https://github.com/wedevelopers/miniblog https://docs.djangoproject.com/en/1.4/intro/tutorial01/ www.djangoproject.com www.django.es/ www.djangobook.com/ http://www.maestrosdelweb.com/editorial/curso-django-introduccion/ http://www.slideshare.net/alatar/django-el-framework-web-definitivo-1362169 http://www.youtube.com/watch?v=St-30zsoDus http://tutorialdjango.com.ar/ http://www.youtube.com/playlist?list=PLoDZ1mRwCXTZUucL7QH9Zg2kEX47vK 5rb http://www.taringa.net/posts/linux/17210047/Guia-Python-como-subir-nuestraaplicacion-a-Internet.html

10. DATOS DEL DOCENTE: Mariuxi Paola Zea Ordoez Master en Educacin Superior, Ingeniero en Computacin y Ciencias de la Informtica Direccin: Calle San Martn # 4-14 entre Coln e Independencia, Pasaje Telfonos: 07-2915426, 07-2912042, 099-8228455, 0939036346. Correo electrnico: mzea@utmachala.edu.ec, mpzea@yahoo.com, mpzea@hotmail.com 11. FIRMA DEL O LOS DOCENTES RESPONSABLES DE LA ELABORACIN DEL SYLLABUS

_______________________ Mariuxi Paola Zea Ordoez 12. FECHA DE PRESENTACION:

Machala, 04 de Febrero del 2014

UNIVERSIDAD TCNICA DE MACHALA


FACULTAD DE INGENIERA CIVIL
ESCUELA DE INFORMTICA
Carrera de Ingeniera de Sistemas

AUTORRETRATO

Mi nombre es Erika Anabel Toro Lpez , soy estudiante de la asignatura de Programacin en red, actualmente curso el Octavo semestre paralelo B en la carrera de Ingeniera de Sistemas de la Escuela de Informtica de la Facultad de Ingeniera Civil de la Universidad Tcnica de Machala. Soy una persona responsable, sociable, que persigues sus ideales, se plantea metas y lucha hasta el final por cumplirlas. Mis metas son:
Aprobar el mdulo de Programacin en red, asimilando y absorbiendo todos

los conocimientos brindados en clases, completando estos con investigacin. Convertirme en una excelente profesional en Ingeniera de Sistemas, convirtiendo as la carrera que me gusta en una herramienta de trabajo, para subsistir.

UNIVERSIDAD TCNICA DE MACHALA


FACULTAD DE INGENIERA CIVIL
ESCUELA DE INFORMTICA
Carrera de Ingeniera de Sistemas

CURRCULO

UNIVERSIDAD TCNICA DE MACHALA

Misin:
La Universidad Tcnica de Machala es una Institucin reconocida en su rea de influencias formadoras de profesionales, con capacidades cientficotcnicas, ticas, solidarias, con identidad nacional, que aporta, creativamente a travs de la docencia, investigacin, vinculacin y gestin, a la solucin de los problemas de desarrollo sostenible y sustentable.

Visin:
La Universidad Tcnica de Machala para el ao 2013 es una institucin acreditada, lidera el desarrollo territorial, forma y perfecciona profesionales competentes, emprendedores, innovadores, crticos y humanistas

FACULTAD DE INGENIERA CIVIL

Misin:
Alcanzar un alto nivel de eficiencia tcnico profesional que permita a la Facultad contribuir activamente en el desarrollo socio-econmico provincial, regional y nacional con profesionales altamente calificados.

Visin:
La Facultad de Ingeniera Civil en cumplimiento de sus funciones de Docencia, Investigacin, Proyeccin Social, y; apoyo de la gestin administrativa est en una bsqueda permanente de la excelencia acadmica, con la participacin planificada, coordinada y coherente de sus actores, a travs de procesos educativos eficientes, eficaces y de efectividad en la formacin de profesionales;

ESCUELA DE INFORMTICA

La Escuela de Informtica fue creada mediante resolucin No, 087/1995 (25 de Octubre de 1995) La Carrera de Ingeniera de Sistemas fue creada mediante resolucin N0. 077/2001 (7 de mayo del 2001) La Misin y Visin fueron aprobadas mediante resolucin No.452 del H.C. D. (Honorables Consejo Directivo) del 13 de Diciembre del 2011

Misin:
Formar profesionales en Ingeniera de Sistemas con capacidades cientficas, tcnicas, tecnolgicas y humansticas, competitivas y comprometidas con el desarrollo Sostenible y sustentable del buen vivir

Visin:
La carrera de Ingeniera de Sistemas para el ao 2013 es la unidad acreditada y lder en el desarrollo y transferencia de soluciones informticas, acorde a los avances cientficos y tecnolgicos

PERFIL PROFESIONAL El Ingeniero de Sistemas de la Universidad Tcnica de Machala es un profesional con espritu empresarial, tico con caractersticas de creatividad, innovacin, capacidad investigativa, deseo permanente de trabajar, de aprender y perfeccionarse con amor propio, con amplia sensibilidad social y con capacidad promotora de desarrollo de la comunidad donde se desempee y estar capacitado para: Generar empresas en las reas tecnolgicas de la Informtica y comunicaciones. Asesorar, informticos. dirigir, intervenir y auditar proyectos

Planificar, analizar, disear e implementar Sistemas de Informacin. y Evaluar, negociar e innovar tecnologa Trabajar proponer en equipos en interdisciplinarios forma consensuada.

soluciones

Identificar y definir procesos organizacionales en el mbito

en el cual se desempee. Evaluar y seleccionar los recursos humanos informticos de

acuerdo a las necesidades de la organizacin.

TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

4 horas (07:00 a 11:00) Martes 07 de octubre del 2013 Ing. Mariuxi Zea Ordoez, Mg. Sc. Presentacin del profesor y lineamientos

Contenidos: Parmetros de evaluacin. Datos interesantes discutidos: Actividades durante la clase Parmetros de evaluacin Examen Proyecto Actividades 3 2 5 Evaluaciones Investigaciones Actividades en Clase Portafolio 2 1 1 1 Diario metacognitivo Tareas Intraclase y Extraclase 10

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

PERODO

07/10/13 11/10/13

1 hora (08:00 a 09:00) Viernes 11 de octubre del 2013 Ing. Mariuxi Zea Ordoez, Mg. Instalacin: Django, Web2Py, PyCharm

Contenidos: Tarea Extraclase acerca de Manual de instalacin de cada Frameworks. Datos interesantes discutidos: Actividades durante la clase
No hubo clases, debido al feriado nacional, del 9 de octubre,

UNIDAD I: Fundamentos a la Programacin en Red

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

PERODO

07/10/2013 11/10/2013

4 horas (07:00 a 11:00) Martes 15 de octubre del 2013 Ing. Mariuxi Zea Ordoez, Mg. Introduccin a Django

Contenidos: 1.2 INTRODUCCIN A LA PROGRAMACIN EN RED Objetivos de desempeo: Describir conceptos y terminologa sobre Django.

Competencia General: Identificar los objetivos Django

Datos interesantes discutidos: Actividades durante la clase

Introduccin a Django

Instalacin Django en la maquina respectiva del laboratorio. Descriptores analizados

Python. Lenguaje para Web.

INTRODUCCIN Antes los usuarios al acceder a una pgina web lo nico que podan hacer era leer e imprimir la informacin buscada, pero en la actualidad pueden inclusive postear informacin sobre algn tema, como es el caso en la pgina de Wikipedia. Aparecieron los scripts para hacer consultas en el servidor. Aparecieron lenguajes como: PHP, ASP, ISP. Python

Lenguaje interpretado e interactivo. Multiplataforma (Lenguaje de plataforma cruzada)

Modular Programacin orientada a objetos.


Sintaxis clara y concisa.

Django

Es un marco de desarrollo de web sobre Python.

Desarrollar aplicaciones web.


Modelos: organizar los datos Vistas: mostrar datos. Plantillas: presentaciones grficas en un solo clic. Mapeador objeto relacional.

MVP

Django funciona con cualquier versin de Python de la 2.4 a la 2.7. Web 2.0

Es la evolucin de la web. Aplicaciones web como si fueran de escritorio. Mezcla de trminos tecnolgicos: CSS, HTML, AJAX, RSS, API, etc., con trminos sociales (Folksonomies, Social Networking, Collaborative Work). AJAX Nuevo modelo. Elimina la interaccin en la web.

Reflexionar: Qu cosas fueron difciles?

Esta clase fue solo de conocimientos generales no hubo nada complicado


Cules fueron fciles? Entender las caractersticas de cada framework

Por qu?
Porque la explicacin fue suficientemente clara Qu aprend hoy? Conoc acerca de diferentes frameworks en especial de Django que es con el que trabajaremos en este mdulo.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

PERODO

07/10/2013 11/10/2013

1 hora (08:00 a 09:00) Viernes 18 de octubre del 2013 Ing. Mariuxi Zea, Mg. Tema del Proyecto

Contenidos: Designacin del Tema del Proyecto. Objetivos de desempeo: o Definir cada tema o Designar grupos de proyecto.

Competencia General: o Seleccin del tema y grupo de Proyecto.

Datos interesantes discutidos: Actividades durante la clase

Tema del Proyecto. Grupo de Proyecto Entidad mdica a la cual va dirigida el Proyecto.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

PERODO

14/10/13 18/10/13

4 horas (07:00 a 11:00) Martes 22 de octubre del 2013 Ing. Mariuxi Zea Ordoez, Mg. Tema de Exposicin

Contenidos: o Tema de exposicin. Objetivos de desempeo: o Designar temas a cada grupo de exposicin.

Datos interesantes discutidos: Actividades durante la clase

Grupo de exposicin. Tema de exposicin.

UNIDAD II: INTRODUCCIN A LA PROGRAMACIN CON DJANGO

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

5 4 horas

PERODO

28/10/2013 al 01/11/2013

Martes, 29 de Octubre del 2013 Ing. Mariuxi Paola Zea Ordoez Introduccin a Django

Desarrollar de acuerdo a lo que se vio en clase Contenidos:

Introduccin a Django.
Arquitectura MVC (MODELO-VISTACONTROLADOR). Arquitectura MVP (MODELO-VISTAPLANTILLA).

Objetivos de desempeo: Comprender la importancia de la programacin en Django con el lenguaje de programacin Python. Competencia General: Conocer la estructura de la programacin en Django, sus ventajas y desventajas, as como tambin su arquitectura de trabajo. Datos interesantes discutidos: Actividades durante la clase Exposicin del grupo 1

Tema: Introduccin a Django

Explicacin y desarrollo de ejercicios sobre el tema.

Descriptores analizados Django, introduccin, ventajas, desventajas, arquitectura.

Resumen conceptual de lo que se vio, incluyendo imgenes, etc. Introduccin Django es un framework de desarrollo Web que ahorra tiempo y hace que el desarrollo Web sea divertido. Al utilizar Django se puede crear y mantener aplicaciones Web de alta calidad con un mnimo esfuerzo. Django te permite enfocarte en la parte creativa la parte divertida de tus aplicaciones Web al mismo tiempo que mitiga el esfuerzo de las partes repetitiva. Al mismo tiempo, Django intenta no entrometerse, dejndote trabajar fuera del mbito del framework segn sea necesario.

DJANGO Django es un framework de desarrollo web de cdigo abierto, escrito en Python. La meta fundamental de Django es facilitar la creacin de sitios web complejos. Django pone nfasis en el re-uso, la conectividad y extensibilidad de componentes, el desarrollo rpido y el principio No te repitas. Python es usado en todas las partes del framework, incluso en configuraciones, archivos, y en los modelos de datos. Caractersticas: Cdigo Abierto. Un mapeador objeto-relacional. Servidor de Pruebas. Paginas Orientadas a contenidos. Una API de base de datos robusta. URLs y Vistas. Un sistema extensible de plantillas basado en etiquetas, con herencia de plantillas. Un sistema "middleware" para desarrollar caractersticas adicionales; por ejemplo, la distribucin principal de Django incluye componentes middleware

que proporcionan cacheo, compresin de la salida, normalizacin de URLs, proteccin CSRF y soporte de sesiones. Soporte de internacionalizacin, incluyendo traducciones incorporadas de la interfaz de administracin. Documentacin incorporada accesible a travs de la aplicacin administrativa (incluyendo documentacin generada automticamente de los modelos y las bibliotecas de plantillas aadidas por las aplicaciones).

Ventajas: La Documentacin. Escalable. Desarrollo Rpido. No hay cambio de contexto Python/SQL Apps Reusables Sus bibliotecas hacen gran parte del trabajo. Soporta varias bases de datos (MySQL, SQLite, Postgres,MS-SQL) Es MVC.

Desventajas: Velocidad Optimizacin de BD Hay ciertas libreras que no son de agrado para ciertos usuarios No es tan simple de implantar. Es ms lento que un framework en un lenguaje compilado. No incluye AJAX de serie (todava).

ARQUITECTURA MVC (MODELO-VISTA-CONTROLADOR).

Ilustracin 1 - Modelo Vista Controlador

Django nos propone seguir la arquitectura MVC ("Modelo-Vista-Controlador"), en pocas palabras, el patrn de diseo MVC organiza el cdigo en base a su funcin. De hecho, este patrn separa el cdigo en tres capas que son:

Ilustracin 2 - Capas Modelo Vista Controlador

Arquitectura MVP (MODELO-VISTA-PLANTILLA) El modelo vista plantilla lo que hace es que cuando el navegador web realice una peticin, la vista interacta inmediatamente con el modelo para obtener los datos, en la cual la vita llama a la plantilla y la plantilla renderiza la respuesta a la solicitud del navegador

Ilustracin 3 - Modelo Vista Plantilla

Reflexionar: Qu cosas fueron difciles? Comprender este nuevo Ide de programacin, su estructura de trabajo y la organizacin de las ventanas de trabajo. Cules fueron fciles? Analizar las ventajas y desventajas que esta aplicacin para la programacin en lenguaje python nos trae. Por qu? Django es una herramienta muy til, ya que se puede crear y mantener aplicaciones Web de alta calidad con un mnimo esfuerzo. Qu aprend hoy? Framework de desarrollo de aplicaciones en Python.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

6 4 horas

PERODO

04/11/2013 al 08/11/2013

Martes, 5 de Noviembre del 2013 Ing. Mariuxi Paola Zea Ordoez Diseo de Plantillas, Conexin a la Base de Datos

Contenidos: Sistema de plantillas de Django Renderizar una plantilla Conexin base de datos Presentacin de datos Filtro de datos

Objetivos de desempeo: Aprender el uso y diseo de las plantillas en la herramienta de desarrollo Django para una buena presentacin de las aplicaciones. Competencia General: Conocer el sistema de conexin de una base de datos con la aplicacin de desarrollo Django. Datos interesantes discutidos: Actividades durante la clase Exposicin del grupo 2 Tema: Sistema de Plantillas de Django Exposicin del grupo 3 Tema: Interactuar con una Base de Datos Explicacin y desarrollo de ejercicios sobre los temas.

Descriptores analizados Controladores, plantillas, if, for, objetcs, models, database_engine. Resumen conceptual de lo que se vio, incluyendo imgenes, etc. SISTEMA DE PLANTILLAS CON DJANGO Una plantilla de Django es una cadena de texto que pretende separar la presentacin de un documento de sus datos. Una plantilla define rellenos y diversos bits de lgica bsica (esto es, etiquetas de plantillas) que regulan cmo debe ser mostrado el documento. Normalmente, las plantillas son usadas para producir HTML, pero las plantillas de Django son igualmente capaces de generar cualquier formato basado en texto. <Head> <Head> <Title> </Title> </Head> <Body> </Body> </Head> Empleo del sistema de plantillas Para usar el sistema de plantillas en el cdigo Python, slo sigue estos dos pasos: 1. Crea un objeto Template brindando el cdigo en crudo de la plantilla como una cadena. Django tambin ofrece un camino para crear objetos Template especificando la ruta al archivo de plantilla en el sistema de archivos; vamos a examinar esto en un rato.

2. Llama al mtodo render() del objeto Template con un conjunto de variables (o sea, el contexto). Este retorna una plantilla totalmente renderizada como una cadena de caracteres, con todas las variables y etiquetas de bloques evaluadas de acuerdo al contexto.

Creacin de objetos Template La manera fcil de crear objetos Template es instanciarlos directamente. La clase Template se encuentra en el mdulo django.template, y el constructor toma un argumento, el cdigo en crudo de la plantilla.

Ilustracin 4: sentencias multilneas son rellenadas con tres puntos. Renderizar una plantilla Un contexto es simplemente un conjunto de variables y sus valores asociados. Una plantilla usa estas variables para llenar y evaluar estas etiquetas de bloque. Un contexto es representado en Django por la clase Context, sta se encuentra en el mdulo django.template. Su constructor toma un argumento opcional: un diccionario que mapea nombres de variables con valores. Llama al mtodo render() del objeto Template con el contexto para llenar la plantilla:

Ilustracin 5: Llamada al mtodo render() Jugando con objetos Context La mayora de la veces, instancias un objeto Context pasando un diccionario completamente poblado a Context. Pero puedes agregar y quitar elementos de un objeto Context una vez que ste est instanciado, tambin, usando la sintaxis estndar de los diccionarios de Python:

Ilustracin 6: Objetos context Etiquetas bsicas de plantillas y filtros El sistema de plantillas se distribuye con etiquetas y filtros incorporados. - if/else La etiqueta { % if %} evala una variable, y si esta es true (esto es, existe, no est vaca y no es un valor Boolean falso), el sistema mostrar todo lo que hay entre { % if %} y { % endif %}, por ejemplo:

Ilustracin 7: Etiqueta if/else

- for La etiqueta { % for %} permite iterar sobre cada uno de los elementos de una secuencia. Como en la sentencia for de Python, la sintaxis es for X in Y, dnde Y es la secuencia sobre la que se hace el bucle y X es el nombre de la variable que se usar para cada uno de los ciclos del bucle. Cada vez que atravesamos el bucle, el sistema de plantillas renderizar todo entre { % for %} y { % endfor %}. Por ejemplo, puedes usar lo siguiente para mostrar una lista de atletas tomadas de la variable athlete_list:

Ilustracin 8: Etiqueta For - Filtros Los filtros de plantillas son formas simples de alterar el valor de una variable antes de mostrarla. Los filtros se parecen a esto: {{ name|lower }} Esto muestra el valor de {{ name }} despus de aplicarle el filtro lower, el cual convierte el texto a minscula. Usa un pipe (|) para aplicar el filtro. Los filtros pueden estar en cadena eso es, la salida del uno de los filtros puede ser aplicada al prximo. Aqu un modismo comn para escapar contenido del texto, y entonces convertir los saltos de lneas en etiquetas <p>: {{ my_text|escape|linebreaks }} Algunos filtros toman argumentos. Un filtro con argumento se ve de este modo: {{ bio|truncatewords:30 }} Esto muestra las primeras 30 palabras de la variable bio. Los argumentos de los filtros estn siempre entre comillas dobles

INTERACTUAR CON UNA BASE DE DATOS Django es apropiado para crear sitios que manejen una base de datos, ya que incluyen una manera fcil pero poderosa de realizar consultas a bases de datos utilizando Python. Patrn Diseo MTV o MVC El patrn de arquitectura de software Modelo-Vista-Controlador (MVC), consta de 3 piezas fundamentales las cuales son: 1. La lgica de acceso a la base de datos 2. La lgica de negocios

3. Y la lgica de presentacin Configuracin de la base de datos Primero, necesitamos tener en cuenta algunas configuraciones iniciales: necesitamos indicarle a Django qu servidor de base de datos usar y cmo conectarse con el mismo.

Ilustracin 9: Configuracin de parmetros en la ventana Settings

DATABASE_ENGINE.- le indica a Django qu base de datos utilizar. Si usas una base de datos con Django, DATABASE_ENGINE debe configurarse con un string de los mostrados en la Tabla DATABASE_NAME.- Le indica a Django el nombre de tu base de datos. DATABASE_USER.- Le indica a Django cual es el nombre de usuario a usar cuando se conecte con tu base de datos.

DATABASE_PASSWORD.- Le indica a Django cual es la contrasea a utilizar cuando se conecte con tu base de datos. DATABASE_HOST.- Le indica a Django cual es el host a usar cuando se conecta a tu base de datos. Si tu base de datos est sobre la misma computadora que la instalacin de Django (o sea localhost), deja este en blanco. DATABASE_PORT.- Le indica a Django qu puerto usar cuando se conecte a la base de datos.

INSTALACIN DE POSTGRESQL 1.- En primer lugar se debe descargar el instalador de PostgreSQL, el cual se lo podemos descargar desde la siguiente direccin:

http://www.enterprisedb.com/products-services-training/pgdownload#windows, en la cual se podr encontrar varias versiones y para diferentes sistemas operativos.

Ilustracin 10: Versiones de Postgree 2.- Una vez que se ha terminado de descargar se busca el archivo, se lo selecciona y se le da clic derecho y ejecutar como administrador

3.- Aparecer la siguiente ventana en la cual se dara simplemente siguiente.

4.- Luego aparecer la siguiente ventana en donde mostrara la ruta en la que se instalara el PostgreSQL, aqu simplemente se le da clic en el botn siguiente.

5.- Luego en la siguiente ventana se da clic a siguiente.

6.- Luego se deber ingresar una contrasea la cual nos ayudara para la conexin de la base de datos.

7.-Luego mostrara el puerto con el que trabaja PostgreSQL, el cual es el 5432

Una vez instalada y configurada la base de datos procedemos hacerlo lo siguiente: Debemos crea una base de datos, para ello conectamos postgres y al hacer eso se abrir una ventanita pidiendo el cdigo de acceso para activar la base de datos.

Ilustracin 11: Interfaz de Postgree para la Base de Datos

Al haber puesto la contrasea damos clic derecho en base de datos y creamos una nueva base de datos. Mostrar la siguiente ventana en donde pondremos el nombre de nuestra base de datos y damos click en ok.

Nos dirigimos a Pycharm para crear un nuevo proyecto de la siguiente manera:

Ejecutamos Pycharm y escogemos crear un nuevo proyecto

Al abrirse el nuevo proyecto tendremos todos los archivos necesarios y en el lado derecho tendremos ya 2 ventanas listas para utilizar que son los settings y los urls

Ahora lo primero y lo mas importante de toda la configuracin para la conexin es lo siguiente:

El Nombre de la BD

Motor de la Base de Datos

El Usuario La contrsea El Host que en este caso es localmente (localhost) El puerto que se configuro al instalar la base de datos

Una vez configurada de forma correcta procedemos hacer la debida creacin de las tablas de nuestra base de datos. El primer paso para utilizar esta configuracin de base de datos con Django es expresarla como cdigo Python. En el archivo models.py, ingresa lo siguiente:

La primer cosa a notar es que cada modelo es representado por una clase Python que es una subclase de django.db.models.Model. La clase antecesora, Model; Cada modelo corresponde a una tabla nica de la base de datos y cada atributo de un modelo corresponde a una columna en esa tabla. Ahora una vez hecho esto vamos a nuestro Pg Admin y observaremos que tenemos 10 tablas creadas de las cuales 9 son de administracin que esas no tenemos que tocar ninguna y la otra ser la tabla que creamos a travs del codigo

Ahora para ingresar datos a la tabla vamos a seleccionar la tabla que creamos y damos clic en el siguiente icono

Ahora ingresaremos unos registros en la base de datos

Filtrar Datos:

Cuando hacemos un SELECT la mayora de las veces lo que vamos a necesitar es manejarnos slo con un subconjunto de los datos. Para ello usaremos el mtodo filter():

Crearemos nuestra url: (r'^filtrar/$', filtrar), Y nuestra vista

Explicacin lnea a lnea: Creamos nuestro mtodo o funcin con el parmetro de peticin, instanciamos nuestro modelo estudiante donde quiero que me almacene los registros donde el nombre sea Patricia, por ultimo este resultado obtenido lo enviamos a nuestra plantilla bajo la variable datos. Y como ejecucin tendramos

Insertar registro: 1) Crear la Url, en este caso: (r'^insertar/$', ingreso), Esta url llamar a la vista ingreso la cual est codificada de la siguiente manera

Explicacin lnea a lnea

Primero creamos nuestro mtodo o funcin llamado ingreso, seguido declaramos las variables q vamos a guardar en nuestra base de datos, campo por campo como son: nombre, apellido, cedula, edad. Creamos una instancia de nuestro modelo llamada p, que contendr los argumentos para el insert, y luego p.save() para ejecutar el ingreso. Por ultimo retornamos un html como mensaje de respuesta. Entonces al ejecutar en el navegador:

Nos guardar en nuestra base de datos:

Y en el navegador tendremos el siguiente resultado:

Modificar registro: Modificar un registro en una base de datos utilizando django, es muy parecido al insertar, se usa el mismo comando, con la diferencia que esta vez se especfica el id en el cual se va a realizar el cambio. Creamos la url para el modificar (r'^modificar/$', modificar),

Esta url llamar a la vista modificar la cual tiene la siguiente codificacin

Resultado obtenido:

Y en el navegador tendremos el siguiente resultado:

Eliminar registros: Creamos la url (r'^eliminar/$', eliminar), Codificacin de la vista eliminar:

Explicacin lnea a lnea: Definimos el mtodo o la funcin y como siempre recibe el parmetro de peticin, seguido creamos una instancia de nuestro modelo para el registro donde el id sea 1 (este parmetro puede variar), ejecutamos el mtodo delete a la instancia y por ultimo retornamos el html donde est el mensaje. Resultado obtenido luego de ejecutar en el navegador

Vemos el registro eliminado

Y en el navegador tendremos el siguiente resultado:

Reflexionar: Qu cosas fueron difciles? Lograr captar de una manera rpida como se realiza la conexin a una base de datos, ya que el proceso es un poco confuso. Cules fueron fciles? Comprender el funcionamiento de los sistemas de plantillas en Django, el uso de etiquetas, filtros, etc. Por qu? Django ha resultado una herramienta de fcil uso y versatilidad con respecto a la conexin de la base de datos pues con solo escribir unas lneas toda la conexin esta lista. Qu aprend hoy? Disear plantillas html en Django y lograr una conexin con Bases de datos.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

7 1 hora

PERODO

04/11/2013 al 08/11/2013

Viernes, 8 de Noviembre del 2013 Ing. Mariuxi Paola Zea Ordoez Prueba Parcial en base a Exposiciones

Contenidos: Evaluacin Parcial

Objetivos de desempeo: Analizar el nivel de captacin por los estudiantes frente a las exposiciones con cada uno de los temas correspondientes a las Unidades I y II. Competencia General: Evaluar los diferentes temas del mdulo de programacin en red. Datos interesantes discutidos: Actividades durante la clase Evaluacin Parcial Temas: Introduccin a Django, Diseo de plantillas, Conexin a base de datos con Django

Descriptores analizados Diseo, conexiones, Django. Resumen conceptual de lo que se vio, incluyendo imgenes, etc. Se realiz una evaluacin parcial en base a todas las exposiciones que se han dado, se manejan varios temas como la introduccin a Django, el diseo de las plantillas hmtl, conexiones con Base de Datos, etc.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

8 4 horas

PERODO

11/11/2013 al 15/11/2013

Martes, 12 de Noviembre del 2013 Ing. Mariuxi Paola Zea Ordoez Sitio de administracin django

Contenidos: Activar y Usar la interfaz de administracin Personalizar la interfaz de administracin.

Objetivos de desempeo: Analizar y aprender la forma en que se puede administrar un sitio o aplicacin web creada en Django. Competencia General: Comprender el uso de un sitio de Administracin de Django por medio de una interfaz grfica de manera sencilla. Datos interesantes discutidos: Actividades durante la clase Exposicin Grupo 5 Tema: Sitio de Administracin de Django Procesamiento de formularios.

Descriptores analizados Diseo, conexiones, Django.

Resumen conceptual de lo que se vio, incluyendo imgenes, etc.

El Sitio de Administracin de Django Una interfaz de administracin es una parte esencial de la infraestructura. Se trata de una interfaz basada en web, limitada a los administradores autorizados, que permite agregar, editar y eliminar el contenido del sitio. La interfaz que usas para escribir en tu blog, el sitio privado que los editores usan para moderar los comentarios de los lectores, la herramienta que tus clientes utilizan para actualizar los comunicados de prensa en la web que construiste para ellos todos son ejemplos de interfaces de administracin.

Activar la interfaz de administracin Pensamos que la interfaz de administracin es la caracterstica ms atractiva de Django y la mayora de Djangonautas estn de acuerdo pero como no todo el mundo lo necesita, es una pieza opcional. Esto significa que hay que dar cierta cantidad pasos para activar la interfaz de administracin: Lo primero que debemos de realizar es tener ya un proyecto creado, sino lo haremos de la siguiente manera.

Lo que se realiz fue crear un proyecto en Django, lo cual dentro de nuestra Pc se cre una carpeta con el mismo nombre de nuestro proyecto.

Ahora se ingresara a la carpeta del proyecto en donde se notara que existe otra carpeta con el mismo nombre y adems existe un archivo llamado manage.py

Ahora para poder trabajar con el administrador de Django lo que se necesitara ser los archivos setting.py y urls.py ambos archivos se encuentran alojados en la subcarpeta del proyecto que se cre con anterioridad, a continuacin se los presenta:

Teniendo el proyecto ya creado con sus respectivos archivos se pasara a activar el administrador que Django trae por defecto para lo cual se lo realizara de la siguiente manera:

1. Ubicado el archivo settings.py se le cambiara el estado de algunas lneas para poder trabajar.

2. Crearemos una Base de Datos, para esta explicacin se trabajara con SQLite3 que es la que viene por defecto en Django.

3. Para este ejemplo se cambiara los valores por los de la imagen, conociendo que en la lnea ENGINE es donde se elegir la base de datos con la que se va a

trabajar, en NAME se colocara el nombre de nuestra base de datos, los otros valores se los llenara en caso de que el gestor de la base de datos lo pida para que Django se pueda conectar.

4. Ahora, en el mismo archivo setting.py, en la parte inferior se realizaran los siguientes cambios para activar el administrador que era lo que se buscaba.

Como se puede observar se ha activado (se borro el #) en la lnea django.contrib.admin, con esto se habr activado el administrador de interfaz.

5. Se procede a guardar los cambios realizados en el archivo settings.py para que se apliquen se apliquen al archivo. Ahora bien, se abrir el archivo urls.py y realizar algunas modificaciones para lograr activar la ventana del administrador. 1. Se abrir el archivo urls.py que se encuentra ubicado en el mismo folder que el settings.py que se termin de modificar.

2. Estando ubicados ya en la edicin del archivo urls.py se pasara a des comentar las siguientes lneas, como se muestra en la figura:

3. Luego en la parte inferior se descomentara otra lnea ms para habilitar el administrador de Django.

Pues una vez realizados estos cambios se pasara a guardar y cerrar el archivo.

Ahora se pasara a crear la base de datos de la siguiente manera:

Se abre el CMD y nos ubicamos dentro de nuestro proyecto, para luego ejecutar el siguiente comando: python manage.py syncdb el cual creara las tablas del administrador que viene por defecto

En el mensaje que se muestra nos indica si deseamos crear un super-Usuario, le pondremos yes, para poder ingresar al administrador.

En lo siguiente se llenara los datos del super-usuario.

Para poder ingresar a la pgina de administracin de Django se Esta es la interfaz principal del administrador de Django.

Usar la Interfaz de Administracin La interfaz de administracin est diseada para ser usada por usuarios no tcnicos, y como tal debera ser lo suficientemente clara como para explicarse por s misma. Aun as, se brindan unas pocas notas sobre sus caractersticas. Lo primero que vers es una pgina de identificacin.

Usars el nombre de usuario y la clave que configuraste cuando agregaste tu superusuario. Una vez identificado, vers que puedes gestionar usuarios, grupos y permisos.

Usuarios Grupos y Permisos. Desde que ests identificado como un super-usuario, tienes acceso a crear, editar y eliminar cualquier objeto. Sin embargo, la interfaz de administracin tiene un sistema de permisos de usuario que puedes usar para darles a otros usuarios acceso limitado a las partes de la interfaz que ellos necesitan. Puedes editar estos usuarios y permisos a travs de la interfaz de administracin, como si fuese cualquier otro objeto. Los vnculos a los modelos Usuarios y Grupos se encuentran en el ndice de la pgina principal junto con todo el resto de los modelos que ha definido. Los objetos usuario tienen el/los campos estndar nombre de usuario, contrasea, direccin de correo, y nombre real que puedes esperar, seguidos de un conjunto de campos que definen lo que el usuario tiene permitido hacer en la interfaz de administracin. Primero, hay un conjunto de tres opciones seleccionables: La opcin Staff Status indica que el usuario est habilitado a ingresar a la interfaz de administracin (por ejemplo, indica que el usuario es considerado un miembro del staff en tu organizacin). Como el mismo sistema de usuarios puede usarse para controlar el acceso al sitio pblico (es decir, sitios restringidos no administrativos), esta opcin diferencia entre usuarios pblicos y administradores. La opcin Activo define si el usuario est activo en todo sentido. Si est desactivada, el usuario no tendr acceso a ninguna URL que requiera identificacin.

La opcin Super User da al usuario completo e irrestricto acceso a todos los elementos de la interfaz de administracin, y sus permisos regulares son ignorados. Creacin de Usuarios/Grupos Para esto se deber de realizar los siguientes pasos: Estando dentro del administrador de Django pasaremos a crear un grupo de la siguiente manera: 1. Daremos clic en Agregar Grupo.

2. En lo siguiente se proceder a darles privilegios al grupo de esta forma.

3. Por ultimo le damos a Guardar y habremos creado un grupo, ahora faltara aadirle usuarios. Agregar usuarios al Centro de Administracin de Django.

1. Luego de haber dado clic sobre Aadir en Usuarios, tendremos que llenar los datos de la siguiente manera y le damos en guardar para crear al Usuario.

2. Una vez creado el usuario se pasara a darle privilegios y llenar los datos extras que se piden, para este ejemplo se le asignara privilegios de Staff Status y de Activo.

3. Luego se le deber asignar a un grupo en este caso se lo agregara al grupo Exposicin (creado en los pasos anteriores).

4. Una vez realizada esta accin, se le podr agregar privilegios dedicados para este usuario, como se muestra en la figura:

Personalizar la apariencia de la interfaz de administracin Una vez creado los usuarios administradores en Django, procedemos a cambiar la visualizacin de la interfaz de administracin, y podemos cambiar el banner por defecto que presenta esta interfaz de la siguiente manera: 1. Nos dirigimos hacia la siguiente ruta en el explorador de Windows: << C:\Python27\Lib\site-packages\django\contrib\admin\templates\admin >> O donde hayamos instalado Django en nuestro equipo 2. Para personalizar la cabecera o el banner predeterminado, copiamos el archivo

HTML llamado: base_site.html

3. En el proyecto de Pycharm, nos dirigimos hacia la carpeta Templates, damos clic derecho y creamos un nuevo Directory, o carpeta

4. Luego damos el nombre de admin (Este nombre no debe ser cambiado)

5. Luego copiamos dentro de esta carpeta el archivo copiado previamente

6. Ahora que tenemos copiado nuestro archivo base de la plantilla de administracin de Django, procedemos a modificarlo a nuestro gusto., por ejemplo:

Mostrndose de la siguiente manera en el navegador:

Reflexionar: Qu cosas fueron difciles? Lograr captar la forma en que se crea o se maneja el sitio de administracin de Django. Cules fueron fciles? Comprender el funcionamiento de los grupos en el sitio de administracin, la asignacin de permisos, creacin de usuarios, etc. Por qu? Django es una herramienta que nos facilita mucho las cosas, es por esto que se cuenta con un sitio propio de administracin de usuarios, de manera que sea interactivo y de fcil uso hacia el programador. Qu aprend hoy? Manejo del Sitio de Administracin de Django.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO: Contenidos: Bsquedas

PERODO

18/11/2013 al 23/11/2013

4 horas Martes, 19 de Noviembre del 2013 Ing. Mariuxi Paola Zea Ordoez Procesamiento de formularios

Creacin de un formulario para comentarios Procesamiento de datos Reglas de validacin. Objetivos de desempeo: Interactuar con la base datos mediante formularios. Competencia General: Aprender crear Formularios en Django utilizando plantillas. Datos interesantes discutidos: Actividades durante la clase Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de formularios Ejercicios de laboratorio Descriptores analizados Formularios. Get, Post. Procesamiento de formularios 2.15 Bsquedas MANEJO DE FORMULARIOS

Los formularios son muy importantes cuando se necesita obtener informacin del usuario. Muchas veces el usuario no escribe los datos que se le piden o no los escribe de manera correcta. Existen secuencias que comprueban que la informacin est correcta, 1.1 Pasos para el manejo de Formularios

1. Abrimos el entorno de trabajo de pyCharm.

2. Dar clic en File New Project.

3. Creamos un nombre al formulario. Dar clic en OK.

4. Creamos en Template los archivos html que se va a utilizar.

5. Crear la base de datos

1.2 Habilitar el sitio de administracin de Django Para ello debemos habilitar las siguientes lneas de cdigo.

Descomentamos la lnea de url del sitio de administracin de django, para poder alojarnos a dicho sitio

1. Descomentamos la lnea predeterminado de django para porder habilitar el administrador django.contrib .admin

2. Buscamos nuestro proyecto de la aplicacin de django y copiamos la ruta del archivo manage.py

3. Nos dirigimos a la ruta del archivo de nuestro proyecto con la ruta que hemos copiado. 4. Sincronizamos mi nuevo super usuario, del sitio de administracion de django. 5. Configuramos nuestro nombre de usuario y password para nuestra nueva cuenta del sitio de administracion de django.

6. Ejecutamos nuestro proyecto de django para ver los resultados

7. Una vez ejecutado el proyecto, observamos que nos aparece una pgina no encontrada, por lo que no tenemos alojado un template en esa ruta.

8. Ingresamos nuestro nombre de usuario y contrasea que configuramos en el terminal de Windows para el sitio de administracin.

9. Nos aparece el entorno de administracin del sitio de django, en donde vamos a crear nuestras tablas para el ingreso de todos nuestros datos del formulario.

10. Crear una pgina HTML para la pgina principal

2.16 Creacin de un Formulario 11. Estructuramos nuestra plantilla html

12. En el archivo Views.py definimos una funcin para llamar al template que hemos creado y a su vez poder renderizarlo.

13. En el archivo de la urls.py llamamos al mtodo que creamos en el archivo views.py para poder re direccionarlo a una nueva url que ser llamado en nuestro navegador 14. Importamos el mtodo para poder utilizarlo en nuestro archivo urls.py.

15. Ejecutamos el proyecto y damos clic en el vnculo del servidor 127.0.0.1:8000 y observamos que nos ha alojado la nueva plantilla HTML que hemos creado

2.17 Procesamiento de Datos 1.3 Crear mdulos

1. Crear campos a utilizar en el login, es decir creamos los datos de la tabla que se van a utilizar en el formulario de django, con su respectiva dimensiones de los modelos de cada registro.

2. Creamos un nuevo archivo llamado admin.py que me va permitir, alojar mi modelo de la tabla al sitio de administracin de Django.

3. Importar la librera para habilitar el sitio de administracin y registramos nuestro nuevo modelo en este caso Clientes.

4. Corremos el manage y el proyecto, para ver los resultados.

5. Creamos en templates un nuevo archivo Html.

6. En el archivo Views creamos una Vista para los formularios, y llamamos a nuestra plantilla Registro.html para poder vincularla a una nueva vista.

7. En el archivo urls.py vamos a re direccionar la pgina Registro mediante la clase que hemos creado en el archivo views.py.

8. En el archivo Registro.hml colocamos un <form></form> para poder llamar a mi formulario que he creado en mi archivo de modelo.

9. En el archivo de la urls.py llamamos al mtodo que creamos en el archivo views.py para poder re direccionarlo a una nueva url que ser llamado en nuestro navegador

10. Dentro de la clase Registro escribimos un success_url para poder redireccioname a mi misma pgina de Registro.html a lo que guarde mi registro del formulario.

11. Ejecutamos y visualizamos en el navegador 12. Registramos nuestro datos e ingresamos un nuevo cliente

1.4 Crear una pgina html para mostrar los clientes

1. Creamos un archivo HTML en Templates.

2. En el views creamos una nueva clase para mostrar los datos del cliente mediante el modelo de vista listView.

3. En el archivo de la urls.py llamamos al mtodo que creamos en el archivo views.py para poder re direccionarlo a una nueva url que ser llamado en nuestro navegador.

4. En la plantilla de MostrarDatos.html hacemos un arreglo para reccorer nuestra lista de objetos que nos arroja el listView.

5. Ejecutamos el proyecto para visualizar los resultados en el navegador

1.5 Estilos CSS

1. Creamos un directorio con el nombre static.

2. Crear un archivo con el nombre style.css

3. Configuramos nuestro archivo css con todos los estilos necesarios que se utilizan en nuestra plantilla HTML, utilizando varias propiedades de color, tamao, bordes y estilos de fuente.

4. En settings pusimos en la ruta en STATIC ROOT que se encuentra nuestro archivo css.

5. Comenta la siguiente lnea de StaticFiles que se encuentra dentro de INSTALLED_APPS para poder utilizar los estilos css en django.

6. En el archivo de urls.py escribimos una url de acceso de arhivo para nuestro css. url(r'^static/(?P<path>.*)$','django.views.static.serve',{'document_root': settings.STATIC_ROOT}),

7. Enlazar el estilo con daca plantilla html Enlazamos nuestro estilo css en cada una de las plantillas que deseemos mediante un link que me va permitir conocer la ruta donde se encuentra mis estilos. <link rel="stylesheet" href="/static/style.css"/>

8. Ejecutamos y vemos como nuestro fondo de la plantilla toma el estilo css que hemos configurado.

2.18 Reglas de Validacin Podemos programar validacin extra asociada a cada Field del formulario escribiendo un mtodo clean_<fieldname>:

Este nuevo mtodo ser llamado despus del validador que tiene el campo por defecto (en este caso, el validador de un CharField obligatorio). Dado que los datos del campo ya han sido procesados parcialmente, necesitamos obtenerlos desde el diccionario clean_data del formulario. Usamos una combinacin de len() y split() para contar la cantidad de palabras. Si el usuario ha ingresado muy pocas palabras, lanzamos un error ValidationError.

Es importante que retornemos explcitamente el valor del campo al final del mtodo. Esto nos permite modificar el valor (o convertirlo a otro tipo de Python) dentro de nuestro mtodo de validacin. Reflexionar: Qu cosas fueron difciles? La creacin de formularios fue lo que se me complico un poco al momento de programar, por lo que todo debe hacerse va cdigo puro. Cules fueron fciles? Fue sencillo comprender la bsqueda y procesamiento de datos. Por qu? Porque son sentencias que ya hemos venido desarrollando mdulos atrs, lo nico que es comprender la sintaxis Qu aprend hoy? Validar datos y comprender el procesamiento de datos.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

10 4 horas

PERODO

25/11/2013 al 30/11/2013

Martes, 26 de Noviembre del 2013 Ing. Mariuxi Paola Zea Ordoez Vistas Avanzadas y URLconfs

Contenidos: Trucos de URLconf Incluyendo otras URLconfs Procesamiento de datos Objetivos de desempeo: Detallar sobre la funcionalidad avanzada en el framework sobre las URLconfs. Competencia General: Comprender las funciones de vista de Django y las URLconfs. Datos interesantes discutidos: Actividades durante la clase Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de las URLconfs. Ejercicios de laboratorio Descriptores analizados URLconfs Urlpatterns

Vistas Avanzadas y URLconfs 2.19 Trucos de URLconf Cada entrada de la urlconf incluye su funcin vista asociada, que se Pasa directamente como un mtodo. Esto significa que es necesario importar las funciones view en la Parte superior del mdulo. Pero a medida que las aplicaciones Django crecen en complejidad, sus URLconf crecen tambin, y mantener esos import puede ser tedioso de manejar. Considera esta URLconf, que se basa en el ejemplo:

Pero a medida que las aplicaciones Django crecen en complejidad, sus URLconf crecen tambin, y mantener esos import puede ser tedioso de manejar. (Por cada nueva funcin

vista, tienes que recordar importarla y la declaracin de importaciones tiende a volverse demasiado larga si se utiliza este mtodo). Es posible evitar esa tarea tediosa importando el mdulo views directamente. Este ejemplo de URLconf es equivalente al anterior:

Otra forma de importar

Otra forma

Nota que no se pone un punto detrs del prefijo, ni un punto delante de los string vista. Django los pone automticamente. Las siguientes son ventajas del enfoque string: Es ms compacto, porque no requiere que importes las funciones vista. Resulta en URLconfs ms fciles de leer y de manejar si tus funciones vista estn extendidas por varios mdulos Python diferentes.

Las siguientes son ventajas del enfoque del mtodo: Permite un fcil empaquetado de funciones vista. Ver la seccin Empaquetado de funciones vista ms adelante en este captulo. Es ms Pythnico es decir, est ms en lnea con las tradiciones Python, como la de pasar funciones como objetos. Ambos enfoques son vlidos e incluso puedes mezclarlos dentro de la misma URLconf. La eleccin es tuya.

Usar mltiples prefijos de vista

En la prctica, si usas la tcnica del string, probablemente termines mezclando vistas hasta el punto en que las vistas de tu URLconf no tengan un prefijo comn. Sin embargo, todava puedes sacar provecho del atajo del prefijo de las vistas para remover esta duplicacin. Simplemente junta los objetos patterns(), as:

Despus:

Casos especiales de URLs en modo Debug

Hablando de construir urlpatterns de forma dinmica, quizs quieras aprovechar esta tcnica para alterar el comportamiento de tu URLconf mientras ests en el modo depuracin de Django. Para hacer eso simplemente comprueba el valor de la configuracin DEBUG en tiempo de ejecucin, as:

Usar grupos con nombre

Hasta ahora en todos nuestros ejemplos URLconf hemos usado, grupos de expresiones regulares sin nombre es decir, ponemos parntesis en las partes de la URL que queremos capturar y Django le pasa ese texto capturado a la funcin vista como un argumento posicional. En un uso ms avanzado, es posible usar grupos de expresiones regulares con nombre para capturar partes de la URL y pasarlos como argumentos clave a una vista.

Argumentos claves vs. Argumentos posicionales

A una funcin de Python se la puede llamar usando argumentos de palabra clave o argumentos posicionales y, en algunos casos, los dos al mismo tiempo. En una llamada por argumentos de palabra clave, se especifican los nombres de los argumentos junto con los valores que se le pasan. En una llamada por argumento posicional, sencillamente pasas los argumentos sin especificar explcitamente qu argumento concuerda con cual valor; la asociacin est implcita en el orden de los argumentos.

Por ejemplo, considera esta sencilla funcin:

Para llamarla con argumentos posicionales, se especifican los argumentos en el orden en que estn listados en la definicin de la funcin:

Para llamarla con argumentos de palabra clave, se especifican los nombres de los argumentos junto con sus valores. Las siguientes sentencias son equivalentes:

Finalmente, se pueden mezclar los argumentos posicionales y por palabra clave, siempre y cuando los argumentos posicionales estn listados antes que los argumentos por palabra clave. Las siguientes sentencias son equivalentes a los ejemplos anteriores:

En las expresiones regulares de Python, la sintaxis para los grupos de expresiones regulares con nombre es (?P<nombre>patrn), donde nombre es el nombre del grupo y patrn es algn patrn a buscar. Aqu hay un ejemplo de URLconf que usa grupos sin nombre:

Aqu est la misma URLconf, reescrita para usar grupos con nombre:

Esto produce exactamente el mismo resultado que el ejemplo anterior, con una sutil diferencia: se le pasa a las funciones vista los valores capturados como argumentos clave en lugar de argumentos posicionales. Por ejemplo, con los grupos sin nombre una peticin a /articles/2006/03/ resultara en una llamada de funcin equivalente a esto: month_archive(request, 2006 , 03 ) Entendiendo donde busca una URLconf Django posee un mapeo de URLs que permite controlar el despliegue de las vistas, esta configuracin es conocida como URLConf. El trabajo del URLConf es leer la URL que el usuario solicit, encontrar la vista apropiada para la solicitud y pasar cualquier variable que la vista necesite para completar su trabajo. El URLConf est construido con expresiones regulares en Python y sigue la filosofia de Python: Explicito es mejor que implcito. Este URLConf permite que las rutas que maneje Django sen agradables y entendibles para el usuario. Si consideramos al URLConf en el esquema anterior tendramos este resultado ms completo.

2.20 Incluyendo otras URLconfs Si tu intencin es que tu cdigo sea usando en mltiples sitios implementados con Django, debes considerar el organizar tus URLconfs en una manera que permita el uso de inclusiones. Tu URLconf puede, en cualquier punto, incluir otros mdulos URLconf. Esto se trata, en esencia, de enraizar un conjunto de URLs debajo de otras . Por ejemplo, esta URLconf incluye otras URLconfs: from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^weblog/ , include( mysite.blog.urls )), ( r ^photos/ , include( mysite.photos.urls )), ( r ^about/$ , mysite.views.about ), ) Existe aqu un detalle importante: en este ejemplo, la expresin regular que apunta a un include() no tiene un $ (carcter que coincide con un fin de cadena) pero si incluye una barra al final. Cuando Django encuentra include(), elimina todo el fragmento de la URL que ya ha coincidido hasta ese momento y enva la cadena restante a la URLconf incluida para su procesamiento subsecuente. Continuando con este ejemplo, esta es la URLconf mysite.blog.urls: from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^( \ d \ d \ d \ d)/$ , mysite.blog.views.year_detail ), ( r ^( \ d \ d \ d \ d)/( \ d \ d)/$ , mysite.blog.views.month_detail ), ) Con esas dos URLconfs, veremos aqu cmo seran manejadas algunas peticiones de ejemplo:

/weblog/2007/: En la primera URLconf, el patrn r^weblog/ coincide. Debido a que es un include(), Django quita todo el texto coincidente, que en este caso es weblog/. La parte restante de la URL es 2007/, la cual coincide con la primera lnea en la URLconf mysite.blog.urls.

/weblog//2007/: En la primera URLconf, el patrn r^weblog/ coincide. Debido a que es un include(), Django quita todo el texto coinciente, que en este caso es weblog/. La parte restante de la URL es /2007/ (con una barra inicial), la cual no coincide con ninguna de la lneas en la URLconf mysite.blog.urls.

/about/: Esto coincide con el patrn de la vista mysite.views.about en la primera URLconf, demostrando que puedes combinar patrones include() con patrones no include().

Como trabajan los parmetros capturados con include() Una URLconf incluida recibe todo parmetro que se haya capturado desde las URLconf padres, por ejemplo: # root urls.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^(?P<username> \ w+)/blog/ , include( foo.urls.blog )), ) # foo/urls/blog.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^$ , foo.views.blog_index ), ( r ^archive/$ , foo.views.blog_archive ), )

En este ejemplo, la variable capturada username() es pasada a la URLconf incluida y, por lo tanto, a todas las funciones vista en dicha URLconf. Notar que los parmetros capturados sern pasados siempre a todas las lneas en la URLconf incluida, con independencia de si la vista de la lnea realmente acepta esos parmetros como vlidos. Por esta razn esta tcnica solamente es til si ests seguro de que cada vista en la URLconf incluida acepta los parmetros que ests pasando. Cmo funcionan las opciones extra de URL.conf con include() De manera similar, puedes pasar opciones extra de URLconf a include() as como puedes pasar opciones extra de URLconf a una vista normal como un diccionario. Cuando haces esto, las opciones Reflexionar: Qu cosas fueron difciles? La inclusin de las URLconfs ya que esta trabaja como un diccionario de datos. Cules fueron fciles? La codificacin de URLconfs Por qu? Es fcil de crear url y adems son muy importantes para el desarrollo del software, porque me permite una facilidad de comprender cuando estoy navegando en la pgina es decir para el usuario. Qu aprend hoy? El manejo de las URLconf

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

11 4 horas

PERODO

16/12/2013 al 21/12/2013

Martes, 17 de Diciembre del 2013 Ing. Mariuxi Paola Zea Ordoez Vistas Genricas

Contenidos: Usar vistas genricas Vistas genricas de objetos Extender las vistas genricas. Objetivos de desempeo: Detallar sobre la funcionalidad avanzada sobre cmo generar vistas genricas. Competencia General: Comprender las funciones de vista que podemos generar en Django. Datos interesantes discutidos: Actividades durante la clase Resolucin de preguntas objetivas. Investigaciones para profundizar los temas. Exposiciones grupales sobre la temtica del da. Ejercicios de laboratorio Descriptores analizados Publisher info Template Views 2.21 Usar vistas genricas Extra sern pasadas a todas las lneas en la URLconf incluida. Por ejemplo, los siguientes dos conjuntos de URLconfs son funcionalmente idnticos.

Conjunto uno: # urls.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^blog/ , include( inner ), { blogid : 3}), ) # inner.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^archive/$ , mysite.views.archive ), ( r ^about/$ , mysite.views.about ), ( r ^rss/$ , mysite.views.rss ), ) Conjunto dos: # urls.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^blog/ , include( inner )), ) # inner.py from django.conf.urls.defaults import * urlpatterns = patterns( , ( r ^archive/$ , mysite.views.archive , { blogid : 3}), ( r ^about/$ , mysite.views.about , { blogid : 3}), ( r ^rss/$ , mysite.views.rss , { blogid : 3}), ) Inclusin Como en el caso de los parmetros capturados (sobre los cuales se explic en la seccin anterior), las opciones extra se pasarn siempre a todas las lneas en la URLconf incluida, sin importar de si la vista de la lnea realmente acepta esas opciones como vlidas. Por eta razn esta tcnica es til slo si ests seguro que todas las vistas en la URLconf incluida aceptan las opciones extra que ests pasando.

2.22 Vistas genricas de objetos De nuevo aparece aqu un tema recurrente en este libro: en el peor de los casos, el desarrollo Web es aburrido y montono. Hasta aqu, hemos cubierto cmo Django trata de alejar parte de esa monotona en las capas del modelo y las plantillas, pero los desarrolladores Web tambin experimentan este aburrimiento al nivel de las vistas. Las vistas genricas de Django fueron desarrolladas para aliviar ese dolor. stas recogen ciertos estilos y patrones comunes encontrados en el desarrollo de vistas y los abstraen, de modo que puedas escribir rpidamente vistas comunes de datos sin que tengas que escribir mucho cdigo. Ciertas tareas comunes, como mostrar una lista de objetos, y escribir cdigo que muestra una lista de cualquier objeto. Por lo tanto el modelo en cuestin puede ser pasado como un argumento extra a la URLconf. Django viene con vistas genricas para hacer lo siguiente: Realizar tareas sencillas comunes: redirigir a una pgina diferente y rende rizar una plantilla dada. 2.23 Extender las vistas genricas.

Las vistas genricas puede acelerar el desarrollo sustancialmente. En la mayora De los proyectos, sin embargo, llega un momento en el que las vistas genricas no son suficientes. Crear contextos de plantilla La plantilla publisher list almacena todos los books en una variable llamada object_list. Aunque que esto funciona bien, no es una forma amistosa para los autores de plantillas: ellos slo tienen que saber aqu que estn trabajando con books. Un nombre mejor para esa variable sera publisher_list. Podemos cambiar el nombre de esa variable fcilmente con el argumento template_object_name:

Proveer un template_object_name til es siempre una buena idea. Tus compaeros de trabajo que disean las plantillas te lo agradecern. Agregar un contexto extra La vista genrica object_detail provee el publisher al contexto, pero parece que no hay forma de obtener una lista de todos los publishers en esa plantilla. Pero s la hay: todas las vistas genricas toman un parmetro opcional extra, extra_context. Este es un diccionario de objetos extra que sern agregados al contexto de la plantilla. Por lo tanto, para proporcionar la lista de todos los publishers en la vista de detalles, usamos un diccionario info como el que sigue:

Esto llenara una variable {{ book_list }} en el contexto de la plantilla. Este patrn puede ser usado para pasar cualquier informacin hacia la plantilla para la vista genrica. Es muy prctico. El problema aparece cuando las consultas en extra_context son evaluadas. Debido a que este ejemplo coloca Publisher.objects.all() en la URLconf, slo se evaluar una vez (cuando la URLconf se cargue por primera vez). Una vez que agregues o elimines publishers, notars que la vista genrica no refleja estos cambios hasta que reinicias el servidor Web (mira Almacenamiento en cach y Query-Sets en el Apndice C para mayor informacin sobre cundo los QuerySets son almacenados en la cache y evaluados).

Este problema no se aplica al argumento queryset de las vistas genricas. Ya que Django sabe que ese uerySet en particular nunca debe ser almacenado en la cach, la vista genrica se hace cargo de limpiar a cach cuando cada vista es renderizada. La solucin es usar un callback en extra_context en vez de un valor. Cualquier callable (por ejemplo, una funcin) que sea pasado a extra_context ser evaluado cuando su vista sea renderizada (en vez de slo la primera vez). Puedes hacer esto con una funcin explcitamente definida:

Filtrado complejo con funciones adaptadoras Otra necesidad comn es filtrar los objetos que se muestran en una pgina listado por alguna clave en la URLconf.

Reflexionar: Qu cosas fueron difciles? En cuanto a las vistas genricas, no comprend como usarlas. Cules fueron fciles? Bueno no fue tan fcil el comprender las vistas genricas que podemos realizar con Django Por qu? Un poco complejo en el filtrado de funciones y agregar contexto extra. Qu aprend hoy? El manejo de las vistas genricas y como extender esas vistas.

UNIDAD III: PROGRAMACIN AVANZADA CON DJANGO

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

12 4 hora

PERODO

23/12/2013 al 28/12/2013

Martes, 24 de Diciembre del 2013 Ing. Mariuxi Paola Zea Ordoez

Extender el sistema de plantillas

Contenidos: Revisin del lenguaje de plantillas Detalles internos de la carga de plantillas Escribir cargadores de plantillas personalizado Configurar el sistema de plantillas en modo autnomo

Objetivos de desempeo: Detallar sobre la funcionalidad sobre como extender los sistemas de plantillas y usar etiquetas personalizadas. Competencia General: Comprender como generar plantillas personalizadas en Django Datos interesantes discutidos: Actividades durante la clase Resolucin de preguntas objetivas.

Investigaciones para profundizar los temas. Exposiciones grupales sobre como extender el sistema de plantillas personalizado. Ejercicios de laboratorio Descriptores analizados Context Templatetags

EXTENDER EL SISTEMA DE PLANTILLAS


Aunque la mayor parte de tu interaccin con el sistema de plantillas (templates) de Django ser en el rol de autor, probablemente quieras algunas veces modificar y extender el sistema de plantillas as sea para agregar funcionalidad, o para hacer tu trabajo ms fcil de alguna otra manera. Este captulo se adentra en el sistema de plantillas de Django, cubriendo todo lo que necesitas saber, ya sea por si planeas extender el sistema, o por si slo eres curioso acerca de su funcionamiento. Procesadores de context

Revisin del lenguaje de plantillas

A continuacin se detalla como trabajar con contextos con el siguiente ejemplo mediante los siguientes pasos: 1. Importar la librera loader y context en el archivo vista. from django.template import loader, Context 2. Luego creamos un function con cualquier nombre en este caso lo llamare vista_contex y que reciba el parmetro request. def vista_contex(request): 3. Acontinuacion creamos una variable que sera c que contendra nuestro context, seguido creamos nuestro context: c = Context({ 'app': 'My app', 'user': 'katherine', 'ip_address': request.META['REMOTE_ADDR'], 'message': 'I am view 1.' }) 4. Luego reden rizamos con el mtodo render_to_response que acoplara todo lo detallado en mi plantilla y adems le enviaremos como parmetro la variable que contiene nuestro context. return render_to_response('miplantilla.html',c) 5. Y al final hemos logrado esto.

6. Luego creamos en nuestra plantilla los datos que sern aadidos por nuestra vista.

Son etiquetas que cree en la mi vista para el contexto

7. Creamos el url para llamar a la vista creada. url(r'^contexto/', view_1), 8. Ejecutamos para visualizar el contenido.

Y podemos visualizar nuestros datos Ahora para cuando yo necesite otro contexto volver a copiar lo mismo todo pero con el procesador de contexto evitamos eso a continuacin realizaremos el siguiente ejercicio:

1.

Definimos una funcin custom_proc. Este es un procesador de contexto toma un objeto HttpRequest y devuelve un diccionario con variables a usar en el contexto de la plantilla retornando el contenido de mi contexto. def custom_proc(request): return { 'app': 'My app', 'user': 'katherine', 'ip_address': request.META['REMOTE_ADDR'] } Hay dos diferencias en cuanto a cmo el contexto es construido. Uno, RequestContext requiere que el primer argumento sea una instancia de HttpRequest la cual fue pasada a la vista en primer lugar ( request). Dos, RequestContext recibe un parmetro opcional processors, el cual es una lista o tupla de funciones procesadoras de contexto a utilizar. En este caso, pasamos custom_proc, nuestro procesador de contexto definido previamente. def view_1(request): return render_to_response('plantilla.html', {'message': 'I am view 1.'}, context_instance=RequestContext(request, processors=[custom_proc]))

2.

Ya no es necesario en cada vista incluir app, user o ip_address cuando construimos el contexto, ya que ahora estas variables son provistas por custom_proc. 4. Cada vista an posee la flexibilidad como para introducir una o ms variables en el contexto de la plantilla si es necesario. En este ejemplo, la variable de plantilla message es creada de manera diferente en cada una de las vistas. 5. Y al final en nuestra vista tenemos lo siguiente.
3.

6. Luego creamos en nuestra plantilla los datos que sern aadidos por nuestra vista.

Son etiquetas que cree en la mi vista para el contexto

7. Creamos el url para llamar a la vista creada.

url(r'^contexto/', view_1),
8. Ejecutamos para visualizar el contenido.

Y podemos visualizar nuestros datos

Detalles internos de la carga de plantillas


En general las plantillas se almacenan en archivos en el sistema de archivos, pero puedes usar cargadores de plantillas personalizados (custom) para cargar plantillas desde otros orgenes Django tiene dos maneras de cargar plantillas: Django.template.loader.get_template(template): get_template retorna la plantilla

compilada (un objeto Template) para la plantilla con el nombre provisto. Si la plantilla no existe, se generar una excepcin templatedoesnotexist. django.template.loader.select_template(template_name_list):

select_template es similar a get-template, excepto que recibe una lista de nombres de plantillas. Retorna la primera plantilla de dicha lista que existe. Si ninguna de las plantillas existe se lanzar una excepcin TemplateDoesNotExist. Escribir filtros de plantillas personalizados

Lo primero que tengo que realizar es crear una biblioteca para plantillas: Primero, decidir qu aplicacin Django alojar la biblioteca. Asegrate de agregar la aplicacin a tu variable de configuracin INSTALLED_APPS.

Ilustracin 12 variables de configuracion

Segundo, crear un directorio templatetags en el paquete de aplicacin Django apropiado. Debe encontrarse en el mismo nivel que models.py, views.py, etc

Ilustracin 13Estructura de directorios

Crea dos archivos vacos en el directorio templatetags: un archivo __init__.py (para indicarle a Python que se trata de un paquete que contiene cdigo Python) y un archivo que contendr tus definiciones personalizadas de etiquetas/filtros. El nombre del segundo archivo es el que usars para cargar las etiquetas ms tarde.

Para ser una biblioteca de etiquetas vlida, el mdulo debe contener una variable a nivel del mdulo llamada register que sea una instancia de template.Library

Ilustracin 14importancion de Template y Register

La creacin de una biblioteca para plantillas es un proceso de dos pasos: Los filtros personalizados son slo funciones Python que reciben uno o dos argumentos: El valor de la variable (entrada) El valor del argumento, el cual puede tener un valor por omisin o puede ser obviado.

Por ejemplo, en el filtro {{ var | foo: "bar" }} el filtro foo recibira el contenido de la variable var y el argumento "bar" Las funciones filtro deben siempre retornar algo. No deben arrojar excepciones, y deben fallar silenciosamente. Si existe un error, las mismas deben retornar la entrada original o una cadena vaca, dependiendo de qu sea ms apropiado. Ejemplo de definicin de un filtro:

Una vez que has escrito tu definicin de filtro, necesitas registrarlo en tu instancia de Library, para que est disponible para el lenguaje de plantillas de Django: Si la versin de Python es superior a 2.4 es necesario usar register.filter()

Luego en la plantilla cargo mi archivo etiquetas para poder usar su contenido.

Ilustracin 15 Importante las etiquetas personalizadas

Para finalizar, lo ms importante es la ruta o urls

Ilustracin 16 Configuracin de urls

Escribir cargadores de plantillas personalizado


Los cargadores de plantillas incluidos con Django cubrirn usualmente todas tus necesidades de carga de plantillas. Es muy sencillo escribir uno personalizado si necesitas alguna lgica especial para dicha carga. Por ejemplo cargar plantillas desde una base de datos, o directamente desde un repositorio usando las libreras Python de, o desde un archivo ZIP. Un cargador de plantillas cada entrada en las variables de configuracin

TEMPLATE_LOADERS debe ser un objeto invocable con la siguiente interfaz: load_template_source(template_name, template_dirs=None)

El argumento template_name es el nombre de la plantilla a cargar El template_dirs es una lista opcional de directorios en los que se buscar en lugar de TEMPLATE_DIRS. Si un cargador es capaz de cargar en forma exitosa una plantilla, debe retornar una tupla: (template_source, template_path). Donde template_source es la cadena de plantilla que ser compilada El template_path es la ruta desde la cual fue cargada la plantilla.

Si

al

cargador

no

le

es

posible

cargar

una

plantilla,

debe

lanzar

django.template.TemplateDoesNotExist Cada funcin del cargador debe tambin poseer un atributo de funcin is_usable, este es un booleano que le informa a la maquinaria de plantillas si este cargador est disponible en la instalacin de Python actual. Para poder entender cmo funciona el cargador de plantillas personalizados escribiremos el siguiente ejemplo que carga una plantilla desde un archivo Zip. Ejemplo: Creamos nuestro proyecto en Django, luego de ello creamos un nuevo directorio que en nuestro caso lo llamaremos plantillas como lo podemos ver a continuacin.

Ilustracin 17 Creacin de directorio para plantillas personalizadas

Dentro del directorio tenemos que crear dos archivos .py el primero es el __init__ y el otro es el archivo Python que me permitir leer la plantilla desde el archivo Zip que lo llamaremos zip_plantilla.py

Ilustracin 18 Archivos .py para cargar la plantilla personalizada

Luego abrimos el archivo zip_plantilla.py y dentro del archivo procedemos a importar lo siguiente:

Ilustracin 19 Importaciones

Ahora creamos la funcin o mtodo que me va a leer el archivo zip donde tengo alojada la plantilla personalizada

Ilustracin 20 Definicion de mi funcin

Mi funcin contiene dos argumentos que son los siguientes: mi_plantilla: es el nombre de la plantilla que se encuentra dentro del archivo Zip template_dirs: es la ruta o direccin donde est alojado el archivo zip que contiene mis plantillas personalizadas, puede tener como valor por defecto None. Dentro de la funcin escribimos lo siguiente:

La funcin getattr Python Python funcin getattr se utiliza para buscar un atributo de un objeto, utilizando un objeto de cadena en lugar de un identificador para identificar el atributo. En otras palabras, las dos sentencias siguientes son equivalentes: valor = obj.attribute valor = getattr (obj, "atributo") Si existe el atributo, se devuelve el valor correspondiente. Si el atributo no existe, se obtiene una excepcin AttributeError

Creamos un bucle for para poder abrir y leer la plantilla desde el zip y me retorne el contenido y la ruta de la plantilla.

Finalmente creamos un atributo de funcin por cada cargador que creemos en nuestro proyecto con la siguiente lnea. Escribimos el nombre de mi funcin o cargador que creamos .is_usable=True dndole el valor booleano para activar nuestro atributo de carga.

Ilustracin 21 Atributo de carga de la funcin

Ahora configuramos nuestro archivo settings los siguientes parmetros: Atributo de plantillas que sern cargadas desde un zip, le damos la ruta el cual no es nada ms que una tupla.

Ilustracin 22Definicion del atributo del settings similar al TEMPLATE_DIRS

Dentro de TEMPLATE_LOADERS escribimos la ruta de la funcin que acabamos de crear para poder cargar la plantilla.

Ilustracin 23 Configuracin del TEMPLATE_LOADERS

Creacin de la vista Para generar nuestra vista importamos lo siguiente

Ilustracin 24 Importaciones para el archivo views.py

Creamos nuestra funcin que cargara la plantilla como lo vemos a continuacin:

Ilustracin 25 Funcin para cargar la plantilla

Nota: la plantilla personalizada se la llama de manera similar como si estuviera incorporada dentro de nuestras plantillas, porque como ya definimos el atributo en el archivo de configuracin lo nico que hacemos es llamar a la plantilla.

Finalmente definimos nuestra url

Ejecutamos la aplicacin y nos visualizar lo siguiente:

Ilustracin 26 Ejecucin de la aplicacin - plantilla personalizada desde un Zip

Reflexionar: Qu cosas fueron difciles? Configurar el sistema de plantillas en modo autnomo Cules fueron fciles? Escribir cargadores de plantillas personalizados, y fueron muy interesante esos temas. Por qu? Porque ms delante cuando estemos desarrollando una aplicacin nos puede servir de gran ayuda personalizar para ciertos procesos plantillas propias que ejecuten ciertos bloques de cdigo con un fin. Qu aprend hoy? Escribir cargadores de plantillas personalizado, crear etiquetas personalizadas y configurar el sistema de plantillas en modo autnomo.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

13 2 horas

PERODO

30/12/2013 al 04/01/2014

Martes, 31 de Diciembre del 2013 Ing. Mariuxi Zea Ordoez Vistas y tipo MIME. Produccin CSV Generar PDFs Otros Frameworks

Contenidos: Generacin de contenido no HTML Vistas y tipos MIME. Produccin CSV Generar PDFs Otros Frameworks: Feeds de Sindicacin y Sitemap. Objetivos de desempeo: Describe conceptos, terminologa y destrezas sobre los temas a tratarse en esta unidad. Competencia General: Identificar los objetivos del mdulo. Datos interesantes discutidos: Actividades durante la clase Exposiciones grupales para explicar con ejemplos la generacin de contenido no HTML Ejercicios de laboratorio Descriptores analizados Contenido no HTML, Mime, CSV, Frameworks, PDFs. Resumen conceptual de lo que se vio, incluyendo imgenes, etc.

GENERACION DE CONTENIDO NO HTML Vistas y Tipos Mime Una funcin vista, o una vista por abreviar, es simplemente una funcin en Python que recibe una peticin Web y retorna una respuesta Web. Esta respuesta puede ser el contenido HTML de una pgina Web, una redireccin, un error 404, un documento XML, una imagen... en realidad, cualquier cosa. Ms formalmente, una funcin vista Django debe: Aceptar una instancia HttpRequest como primer argumento. Retornar una instancia HttpResponse. La clave para retornar contenido no HTML desde una vista reside en la clase HttpResponse, especficamente en el argumento mimetype del constructor. Cambiando el tipo MIME, podemos indicarle al navegador que hemos retornado una respuesta en un formato diferente.

Tipos MIME: MIME es un estndar que clasifica los recursos y provee informacin (a los programas) acerca de cmo manejarlos. Esto permite la correcta manipulacin e interpretacin de diferentes tipos de archivos por parte de los programas (como navegadores). Por ejemplo, gracias a MIME, los navegadores pueden abrir correctamente un archivo ".txt" como un recurso de texto plano y no como un video u otro tipo. Cuando un tipo MIME no es especificado para un recurso, el programa que lo maneje puede "suponerlo" a partir de la extensin del mismo (por ejemplo, un archivo con la extencin ".bmp" debera contener una imagen de mapa de bits). Pero esto puede no siempre dar buenos resultados ya que una sola extensin puede asociarse a ms de un formato. Por su parte, los tipos MIME son nicos. sta es la principal razn para utilizar los tipos MIME siempre que sea posible. Tipo MIME image/png image/jpeg image/gif auido/mp3 text/txt video/avi Ejemplos: Extensin .png .jpg .gif .mp3 .txt .avi

Funciones vista para agregar contenido no HTML a la pgina son los siguientes:

En la codificacin presentada, simplemente se utiliza la ruta de un archivo en el equipo local para que sea abierta y leda por el mtodo open(), se puede usar estas vistas bastante sencillas para servir una imagen, un audio o un archivo de texto y el navegador la mostrar correctamente.

Otra cosa importante a tener presente es que los objetos HttpResponse implementan el API estndar de Python para ficheros. Esto significa que se puede usar una instancia de HttpResponse en cualquier lugar donde Python (o biblioteca de terceros) espera un fichero.

Produccin CSV
El formato CSV (Comma Separated values) es uno de los ms comunes y sencillos para almacenar una serie de valores como si de una tabla se tratara. Cada fila se representa por una lnea diferente, mientras que los valores que forman una columna aparecen separados por un carcter concreto. El ms comn de los caracteres empleados para esta separacin es la coma, de ah el nombre del formato. Sin embargo, es habitual encontrar otros caracteres como el signo del dlar ($) o el punto y coma (;). Gracias al formato CSV es posible guardar una serie de datos, representados por una tabla, en un simple fichero de texto. Adems, software para trabajar con hojas de clculo, como por ejemplo: Excel, permiten importar y exportar datos en este formato. Dentro de su librera estndar, Python incorpora un mdulo especfico para trabajar con ficheros CSV, que nos permite, tanto leer datos, como escribirlos. Son dos los mtodos bsicos que nos posibilitan realizar estas operaciones: reader() y writer(). El primero de ellos sirve para leer los datos contenidos en un fichero CSV, mientras que el segundo nos ayudar a la escritura.

Ejemplo de lectura de un Archivo CSV: Tenemos un fichero llamado Personal.csv, en cuyo interior tenemos almacenado el nombre y apellidos de varias personas, as como su edad.

Juan,Gmez Rofriguez,23 Mara,Lopez Ayala,19

Roberto,Catillo Daz,40
Como se puede ver cada registro de persona se encuentra en una lnea, y cada dato de la persona que queremos recuperar del fichero se encuentra separado por comas. Para poder leer el fichero se realiza la siguiente codificacin:

El mtodo reader() es iterable y nos da acceso a todas las filas del fichero, es por ello, que en nuestro ejemplo, utilizamos un bucle for para iterar sobre el objeto devuelto. Por otro lado, cada elemento iterable es una lista que contiene tantos elementos como valores separados por el carcter de separacin que tenga cada lnea de nuestro fichero. En caso de que empleemos un carcter de separacin diferente a la coma, se debe indicar a travs del parmetro delimiter. Si se cambia el fichero de ejemplo Personal.csv y se reemplaza la coma por el signo de dlar, se tendra que aplicar la siguiente lnea de cdigo:

Ejemplo de escritura de un archivo CSV:


Se tiene una lista de pasajeros problemticos en lneas areas en formato CSV:

Aunque CSV parezca simple, no es un formato que ha sido definido formalmente. Diferentes programas producen y consumen diferentes variantes de CSV, haciendo un poco complicado usarlo. Afortunadamente, Python incluye una biblioteca estndar para CSV, csv, que es bastante robusta. Debido a que el mdulo csv opera sobre objetos similares a ficheros, es muy fcil usar un HttpResponse en lugar de un fichero:

Anlisis del cdigo: Se le da a la respuesta el tipo MIME text/csv (en lugar del tipo predeterminado text/html). Esto le dice a los navegadores que el documento es un fichero CSV. La respuesta obtiene una cabecera Content-Disposition adicional, la cual contiene el nombre del fichero CSV. Esta cabecera (bueno, la parte adjunta) le indicar al navegador que solicite la ubicacin donde guardar el fichero (en lugar de simplemente mostrarlo). El nombre de fichero es arbitrario. Ser usado por los navegadores en el cuadro de dilogo Guardar como... Usar el API de generacin de CSV es sencillo: basta pasar response como primer argumento a csv.writer. La funcin csv.writer espera un objeto de tipo fichero, y los de tipo HttpResponse se ajustan. Por cada fila en el fichero CSV, invocamos a writer.writerow, pasndole un objeto iterable como una lista o una tupla. El mdulo CSV se encarga de poner comillas por ti, as que no tendrs que preocuparte por escapar caracteres en las cadenas que tengan comillas o comas en su interior. Limtate a pasar la informacin a writerow(), que har lo correcto. Este es el patrn general que usars siempre que necesites retornar contenido no HTML: crear un objeto HttpResponse de respuesta (con un tipo MIME especial), pasrselo a algo que espera un fichero, y luego devolver la respuesta.

Generar PDFs
Formato de Documento Porttil (PDF) es un formato desarrollado por Adobe que se utiliza para representar documentos imprimibles, completa con el formato de pxel perfecto, las fuentes incrustadas, y los grficos vectoriales 2D. Usted puede pensar en un documento PDF como el equivalente digital de un documento impreso y, de hecho, los archivos PDF se utilizan con frecuencia en la distribucin de documentos con el fin de imprimirlos. Usted puede fcilmente generar PDFs con Python y Django gracias a la excelente biblioteca abierta ReportLab libre para su descarga en: http://www.reportlab.com.

Pgina oficial de ReportLab

La ventaja de generar archivos PDF de forma dinmica es que usted puede crear archivos PDF a medida para diferentes propsitos - por ejemplo, para diferentes usuarios o diferentes piezas de contenido.

Qu es ReportLab?: ReportLab es un paquete de libreras libre, escrito en Python, que nos permite crear archivos en formato PDF y exportarlos. El primer paso que se debe seguir es tener en cuenta el paquete pdfgen que se utilizara para generar un PDF, se basa esencialmente en una secuencia de instrucciones para dibujar cada pgina del documento. El objeto que proporciona las operaciones de dibujo es el Canvas. El Canvas mide igual que una hoja de papel blanco, con puntos sobre la misma identificados mediante coordenadas cartesianas (X,Y), que por defecto tienen el origen (0,0) en la esquina inferior izquierda de la pgina. La coordenada X va hacia la derecha y la coordenada Y avanza hacia arriba.
Coordenadas cartesianas de una hoja.

Instalacin ReportLab: Antes de hacer cualquier generacin PDF en Django, usted tendr que instalar ReportLab. Por lo general es simple: slo tiene que descargar e instalar desde el men principal, seleccionando la pestaa Downloads, y nos dirigiremos a: http://www.reportlab.com/software/installation/. Aqu elegiremos el tipo de archivo que queramos instalar segn nuestro computador y la versin de Python que hayamos instalado anteriormente.

En nuestro caso elegiremos: For Python 2.7 win32, amd64, as;

ReportLab para la versin Windows de 64 bits y Python 2.7.

Una vez descargado nuestro archivo de instalacin procedemos a ejecutarlo, y nuestro ReportLab se instalar dinmicamente dando clic en Siguiente en cada una de las ventanas de la instalacin.

2
1

3
1

4
1

Finalmente hemos instalado ReportLab en nuestro ordenador y ahora a travs de Python y Django est listo para ser utilizado.

En un proyecto nuevo de Django probamos si ReportLab se instal correctamente mediante los siguientes pasos: Nos dirigimos al men Tools y seleccionamos Run Django Console.

Run Django Console.

En la parte inferior de Pycharm se ejecutara la consola de comandos de Django donde digitaremos lo siguiente: import reportlab.

Si el comando no lanza ningn error la instalacin ha sido exitosa.

Ejemplo 1: 1. Ahora si procedemos ah crear nuestro PDF partiendo desde el view de nuestro proyecto importando las siguientes libreras.

Importamos la clase canvas que nos permitir disponer de herramientas para dibujar lneas, circunferencias, rectngulos, arcos, etc. 2. Creamos una funcin en la que se generar a travs de varios mtodos un Pdf personalizado, de la siguiente manera:

3. Probamos el programa y vemos que en el mismo directorio ya se ha creado un fichero llamado MiPdf.pdf, sin necesidad de realizar ningn otro paso intermedio.

Primer documento generado. El resultado impreso refleja algunas propiedades de una hoja.

4. En el ejemplo anterior hemos creado un PDF sin especificar el tamao del documento, si queremos fijar el tamao de la hoja (A4, A5, etc.) bastara indicarlo en Canvas mediante:

5. Ahora dibujaremos lneas, mediante canvas.line(x1,y1,x2,y2); crculos, empleando con canvas.circle( x_centro,y_centro,radio,stroke=1,fill =1); y rectngulos con esquinas redondeadas,

Canvas.roundRect(x,y,ancho,alto,angulo,stroke=1,fill=0). Para emplear color hay que indicarlo mediante canvas.setFillColorRGB(r,g,b), para el color de relleno, o canvas.setStrokeColorRGB(r,g,b), para fijar el color de las lneas. Para la eleccin del tipo de fuente usamos canvas.SetFont(tipo_fuente,tamao).

6. A la hora de incluir imgenes podemos optar por las siguientes opciones. La primera y ms sencilla es mediante drawImage(image,x,y,width=None,heig ht=None) de la clase Canvas (si no se especifica el alto y el ancho, coloca la figura con sus dimensiones originales).

7. La clase reportlab.platypus.Paragraph permite escribir texto formateado (justificado, alineado a la derecha o izquierda, centrado) en un aspecto elegante, adems de modificar el estilo y color de trozos de la lnea a travs de XML. Mediante Paragraph(texto,style,bulletText=None) se instancia la clase; texto contiene el texto del prrafo, en el que se eliminan los espacios en blanco innecesarios; bulletText indica si el prrafo se escribe con un punto al inicio del mismo; la fuente y otras propiedades del prrafo y el punto se indican mediante el argumento style. Veamos como aadir un prrafo:

8. Si queremos aadir una tabla, es necesario importar from reportlab.platypus import Table,TablsStyle. Una tabla se crea aadiendo una lista de listas, donde cada componente de la lista guarda la informacin de cada fila. Si queremos construir una tabla de 5 filas y 3 columnas hacemos:

9. En una tabla se puede fijar el estilo de cada miembro de la misma. Si por ejemplo, se quiere que el texto de la primera columna sea azul, y que los nmeros sean todos verdes, haremos:

10. El paquete reportlab.lib.styles contiene estilos predefinidos. Con getSampleStyleSheet obtenemos un estilo ejemplo. Tenemos un estilo para la cabecera y otro para el texto normal. Mediante h1.pageBreakBefore=0 decimos que no queremos un salto de pgina cada vez que se escriba una cabecera h1, en caso contrario basta escribir 1. Los diferentes prrafos se van almacenando en la lista story porque posteriormente se aaden al pdf a travs del paquete SimpleDocTemplate de reportlab.platypus:

Otros Frameworks: Feeds de sindicacin y sistemap


Archivos Zip: La biblioteca estndar de Python contiene el mdulo zipfile, que puede escribir y leer ficheros comprimidos en formato ZIP. Puedes usarla para guardar ficheros bajo demanda, o quizs comprimir grandes documentos cuando lo requieran. Para mayor entendimiento implementaremos el siguiente ejemplo: 1. Creamos un proyecto nuevo que le llamaremos

2. Bien ahora crearemos una Base de datos en nuestro archivo models.py insertaremos una funcin la cual ser una tabla de nuestra BD.

3. Ahora modificaremos el archivo urls.py el cual se encuentra la url de inicio donde el usuario realizara la peticin al servidor y la url zip la cual ser la encargada de responder la peticin del usuario.

4. En nuestro archivo views.py creamos una funcin inicio.

* Donde la variable archivos almacenara todos los objetos creados de la tabla Archivos. * La cual nos devuelve el archivo descargas.html renderizado, conjuntamente con la variable archivos que almacena los objetos de la variable archivos.

5. Bien ahora pasaremos a crear nuestro archivo descargas.html.

* Creamos un Form, el cual obtendr un action=/zip/ y un method=post. La accin llamara a la vista zip que posteriormente crearemos en nuestro archivo views. El method ser el mtodo post el cual permite enviar una url extensa con todo el contenido enviado desde el Form y esta ser invisible para el usuario. * Insertamos un for que diga que para cada archivo(arch) en archivos(), se insertara un checkbox el cual consta con un name(que ser nombre de cada registro de la tabla Archivo) y con un value(que ser el id de cada registro de la tabla Archivo). * Luego insertamos un botn submit para enviar el formulario. 6. Por ultimo creamos la vista zip en nuestro archivo views.py importando primeramente las siguientes libreras y paquetes:

Principal librera para crear archivos .zip

7. Finalmente observemos lo explicado y el funcionamiento de los archivos Zip. * Para este ejemplo seleccionemos 2 archivos y damos clic en Enviar y nuestros archivos se descargaran automticamente.

Django incluye un framework para la generacin y sindicacin de feeds de alto nivel que permite crear feeds RSS y Atom de manera sencilla. Qu es RSS? Qu es Atom?: RSS y Atom son formatos basados en XML que se puede utilizar para actualizar automticamente los feeds con el contenido de tu sitio. Lee ms sobre RSS en http://www.whatisrss.com/, y obtn informacin sobre Atom en http://www.atomenabled.org/.

Para crear cualquier feed de sindicacin, todo lo que debes hacer es escribir una corta clase Python. Puedes crear tantos feeds como desees. El framework de generacin de feeds de alto nivel es una vista enganchada a /feeds/ por convencin. Django usa el final de la URL (todo lo que este despus de /feeds/) para determinar qu feed retornar. Para crear un feed, necesitas escribir una clase Feed y hacer referencia a la misma en tu URLconf (ver los Captulos 3 y 8 para ms informacin sobre URLconfs).

Inicializacin: Para activar los feeds de sindicacin en tu sitio Django, agrega lo siguiente en tu URLconf:

Esa lnea le indica a Django que use el framework RSS para captar las URLs que comienzan con "feeds/". (Puedes cambiar "feeds/" por algo que se adapte a tus necesidades). Esta lnea de URLconf tiene un argumento extra: {feed_dict: feeds}. Usa este argume nto extra para pasar al framework de feeds de sindicacin los feeds que deben ser publicados en dicha URL. Especficamente, feed_dict debe ser un diccionario que mapee el slug (etiqueta corta de URL) de un feed a la clase Feed. Puedes definir el feed_dict en el mismo URLconf. Este es un ejemplo completo de URLconf:

El ejemplo anterior registra dos feeds:

El feed representado por LatestEntries residir en feeds/latest/. El feed representado por LatestEntriesByCategory residir en feeds/categories/. Una vez que este configurado, necesitas definir la propia clase Feed. Una clase Feed es una simple clase Python que representa un feed de sindicacin. Un feed puede ser simple (p. ej. noticias del sitio, o una lista de las ltimas entradas del blog) o ms comp lejo (p. ej. mostrar todas las entradas de un blog en una categora en particular, donde la categora es variable). La clase Feed debe ser una subclase de django.contrib.syndication.feeds.Feed. Esta puede residir en cualquier parte del rbol de cdigo.

El framework Sitemap: Un sitemap es un fichero XML en tu sitio web que le indica a los indexadores de los motores de bsqueda cuan frecuentemente cambian tus pginas as como la importancia relativa de ciertas pginas en relacin con otras (siempre hablando de pginas de tu sitio). Esta informacin ayuda a los motores de bsqueda a indexar tu sitio. Por ejemplo, esta es una parte del sitemap del sitio web de Django (http://www.djangoproject.com/sitemap.xml):

El framework sitemap de Django automatiza la creacin de este fichero XML si lo indicas expresamente en el cdigo Python. Para crear un sitemap, debes simplemente escribir una clase Sitemap y hacer referencia a la misma en tu URLconf.

Instalacin: Para instalar la aplicacin sitemap, sigue los siguientes pasos: 1. Agrega django.contrib.sitemaps a tu variable de configuracin INSTALLED_APPS.

2. Asegrate de que django.template.loaders.app_directories.load_template_source est en tu variable de configuracin TEMPLATE_LOADERS. Por omisin se encuentra activado, por lo que los cambios son necesarios solamente si modificaste dicha variable de configuracin. Asegrate de que tienes instalado el framework sites (ver Captulo 14).

Inicializacin: Para activar la generacin del sitemap en tu sitio Django, agrega la siguiente lnea a tu URLconf: ( r ^sitemap.xml$ , django.contrib.sitemaps.views.sitemap , { sitemaps : sitemaps}) Esta lnea le dice a Django que construya un sitemap cuando un cliente accede a /sitemap.xml.

Clases Sitemap: Una clase Sitemap es simplemente una clase Python que representa una seccin de entradas en tu sitemap. Por ejemplo, una clase Sitemap puede representar todas las entradas de tu weblog, y otra puede representar todos los eventos de tu calendario. En el caso ms simple, todas estas secciones se unen en un nico sitemap.xml, pero tambin es posible usar el framework para generar un ndice sitemap que haga a referencia ficheros sitemap individuales, uno por seccin (describindolo sintticamente). Las clases Sitemap debe ser una subclase de django.contrib.sitemaps.Sitemap. Estas pueden residir en cualquier parte del rbol de cdigo. Por ejemplo, asumamos que posees un sistema de blog, con un modelo Entry, y quieres que tu sitemap incluya todos los enlaces a las entradas individuales de tu Blog. Tu clase Sitemap debera verse as:

Ilustracin 27: Clase Sistemap

Reflexionar: Qu cosas fueron difciles? En realidad la clase ha sido amena y entendible aunque temas como Feeds de Sindicacin y Sitemap, se tornaron algo complejos.

Cules fueron fciles? Temas como: Vistas y tipo MIME, Produccin CSV y Generar PDFs Por qu? Por ser conocimientos generales no se han encontrado problemas considerables. Qu aprend hoy? Aprend acerca de la generacin de contenido no html, temas como: Vistas y tipo MIME, Produccin CSV, Generar PDFs, Otros Frameworks: Feeds de Sindicacin y Sitemap.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

14 2 horas

PERODO

06/01/2013 al 11/01/2014

Martes, 07 de Enero del 2014 Ing. Mariuxi Zea Ordoez Cookies Entorno de sesiones Usuarios e identificaciones Permisos, grupos, mensajes y perfiles. Integracin con una base de datos existente Integracin con un sistema de autentificacin. Integracin con aplicaciones web existentes.

Desarrollar de acuerdo a lo que se vio en clase Contenidos:

Sesiones, usuario e inscripciones Cookies Entorno de sesiones Usuarios e identificaciones Permisos, grupos, mensajes y perfiles. Integracin con Base de Datos y aplicaciones existentes Integracin con una base de datos existente Integracin con un sistema de autentificacin. Integracin con aplicaciones web existentes.

Objetivos de desempeo: Describe conceptos, terminologa y destrezas sobre los temas a tratarse en esta unidad. Competencia General: Identificar los objetivos del mdulo.

Datos interesantes discutidos: Actividades durante la clase

Exposiciones grupales para explicar con ejemplos el manejo de usuarios y privilegios. Exposiciones grupales para explicar con ejemplos la integracin con bases de datos y aplicaciones existentes. Ejercicios de laboratorio

Descriptores analizados Cookies, sesiones, autenticacin. Resumen conceptual de lo que se vio, incluyendo imgenes, etc.

SESIONES, USUARIO E INSCRIPCIONES


Cookies Qu es un Cookies?:
Las cookies son pequeos bits de informacin textual, que un servidor web enva a un navegador cliente (tal como Firefox) para autentificarlo; l navegador luego devuelve en su peticin esa cookie (o cookies) cuando visita nuevamente ese sitio web. De esta manera el servidor, lee las cookies que le envi previamente en una conexin anterior.

Cul es el tiempo de vida de una cookies?:


Varios argumentos opcionales que controlan aspectos de la cookie:

Parmetro Por omisin max_age None expires None

Descripcin Segundos que debera durar la cookie. Si es None, la cookie durar slo hasta que se cierre el navegador. La fecha/hora real en que debera expirar la cookie. Debe crearse con el formato "Wdy, DD-Mth-YY HH:MM:SS GMT". Si se da, tiene precedencia frente al parmetro max_age El prefijo de la ruta para la que es vlida esta cookie. Los navegadores slo enviarn la cookie a als pginas que se encuentren bajo este prefijo, as que podemos usarlo para evitar que se enven cookies a otras secciones de nuestro sitio. Especialmente til en caso de que no controlar niveles superiores de nuestro dominio. El dominio para el que es vlida esta cookie. Podemos usar esto para establecer cookies entre dominios diferentes. Por ejemplo, domain=".ejemplo.com" crear una cookie que pueden leer los

path

"/"

domain

None

dominios

www.ejemplo.com, otro.sub.dominio.ejemplo.com.

www2.ejemplo.com

secure

False

Si es None, la cookie la podr leer slo el dominio que la ha establecido. Si se pone a True, le indica al navegador que slo ha de enviar la cookie a pginas a las que se accede mediante HTTPS.

Gestin de Cookies:
El nmero de cookies almacenables es finito, por tanto, el agente de usuario debe eliminar alguna cookie cuando ya ni queda espacio para una nueva (generalmente, se usa un algoritmo tipo descartar la usada hace ms tiempo). Cuando vence la duracin de una cookie, esta se descarta. El navegador la elimina.

Ventajas de usar una cookie:


Puede durar tanto como el sitio web. Ellas seguirn ah, incluso si el navegador est cerrado o abierto. Utiliza para almacenar valores temporales de usuario. Por ejemplo, si un usuario est navegando por una lista paginada de artculos, ordenados de cierta manera, el ajuste de la clasificacin se puede almacenar en una cookie.

Desventaja de usar una cookie:


Se almacena en pequeos archivos dentro del ordenador de los usuarios. Esto significa que el usuario puede manipularlas. Solo puede almacenar una cantidad limitada de datos. Deben pasar todos los datos al servidor web cada pgina cargada. Esta toma de ancho de banda de hasta ms.

Importancia de un cookies:
Es importante porque permite almacenar informacin durante la navegacin del usuario, pero con el fin de usarla en futuras conexiones (futuras sesiones), ms que en la misma sesin. Ejemplos de informacin que podra ser interesante guardarla en la cookie: Si el usuario ha marcado el check para recordar usuario y contrasea. El usuario y a contrasea introducidas por el usuario, para que cuando a nuestro sitio web, se autentifique automticamente sin solicitar otra vez usuario y contrasea. El idioma seleccionado por el usuario la ltima vez que accedi, para mostrarle directamente la pgina en ese idioma y no solicitarle que elija el idioma cada vez que entre.

El ltimo producto que compro (si el sitio web es una tienda online) para mostrarle ofertas de productos relacionados.

Como definir y leer los valores de las cookies:


Obtener los valores de las cookies que ya estn definidas es muy fcil. Cada objeto de tipo peticin, request, contiene un objeto COOKIES que se comporta como un diccionario; puedes usarlo para leer cualquier cookie que el navegador haya enviado a la vista:
def mostrar_color(request): if "colorFavorito" in request.COOKIES: return HttpResponse("<p style='background: %s'>Este es tu color favorito.</p>" % request.COOKIES["colorFavorito"]) else: return HttpResponse("No tienes un color favorito.")

Definir los valores de las cookies es slo un poco ms complicado. Debes usar el mtodo set_cookie() en un objeto de tipo HttpResponse. He aqu un ejemplo que define la cookie favorite_color utilizando el valor que se le pasa como parmetro GET:
def establecer_color(request): if "colorFavorito" in request.GET: response = HttpResponse("<p style='background: %s'>Ahora este es tu color favorito.</p>" % request.GET["colorFavorito"]) response.set_cookie("colorFavorito", request.GET["colorFavorito"], max_age=120, path="/mostrar/", secure= False) return response else:

La pgina a presentarse en html.


<html> <head>

return HttpResponse("No seleccionaste un color favorito.")

<title></title> </head>

<body> <form action="/establecer/" method="get"> <input type="color" name="colorFavorito"/> <input type="submit"/> </form> </body>

Definicin de las Urls:


urlpatterns = patterns('', # Examples: # url(r'^$', 'Chilalin.views.home', name='home'), url(r'^color/', plantilla_color), url(r'^establecer/', establecer_color), url(r'^mostrar/', mostrar_color),

Diferencia entre cookie y sesiones:


La gran diferencia es que las sesiones se mantienen por un periodo de tiempo determinado (por ejemplo, una hora), en el servidor, o bien, hasta que se cierre el navegador; mientras que las cookies, siempre que sean aceptadas por el navegador, se mantienen en el cliente (navegador del usuario), hasta que no sea eliminada manualmente por el mismo.

Entorno de Sesiones
Qu es una sesin?: Una sesin es una serie de comunicaciones entre un cliente y un servidor en el que se realiza un intercambio de informacin. Por medio de una sesin se puede hacer el seguimiento de un usuario a travs de una aplicacin. Cul es el tiempo de vida de una sesin?: El tiempo de vida de usa sesin comienza cuando un usuario se conecta por primera vez a un sitio web por su finalizacin puede estar relacionada con tres circunstancias: Cuando se abandona un sitio web Cuando se alcanza un tiempo de inactividad que es previamente establecido, en este caso la sesin es automticamente eliminada. Si el usuario siguiera navegando se creara una nueva sesin. Se ha cerrado o reiniciado el servidor.

Ventajas de usar sesin: Pueden almacenar grandes cantidades de datos fcilmente. Ahorrar ancho de banda al pasar solo una referencia a la sesin de cada pgina cargada. una cookie en el cliente tiene que pasar todos sus datos. Los datos se almacenan en el servidor web. Esto hace que las sesiones seguras, porque los datos no pueden ser vistos o editados por el cliente. Desventajas de usar sesin: Termina cuando se cierra el navegador a menos que haya configurado para alargar la vida sesiones de Cookie. No puede durar para siempre. Importancia de una sesin: Permite almacenar informacin que puede ser de utilidad durante la navegacin de un usuario por el sitio web. Mientras dure la sesin, la informacin estar disponible cada vez que el usuario solicite una pgina. Algunos ejemplos de informacin que puede resultar interesante guardar en sesin: Si el usuario se ha autentificado o no. Identificador del usuario que se ha autentificado. Productos aadidos a un carro de compra. Datos de facturacin y de direccin para hacer un pedido.

Activar las sesiones:


1. Editar el valor de MIDDLEWARE_CLASSES de forma que contenga django.contrib.sessions.middleware.SessionMiddleware. 2. Comprobar que django.contrib.sessions est incluido en el valor de

INSTALLED_APPS (y ejecutar manage.py syncdb si lo tuviste que aadir). 3. crear una sesin nos centramos en Models, donde se crear la clase usuarios
from django.db import models class Usuarios(models.Model): usuario=models.CharField(max_length=15) contras= models.CharField(max_length=10) nombre= models.CharField(max_length=15) apellido= models.CharField(max_length=15) # La mtodo del unicode nos devuelve un dgito y 3 string. def __unicode__(self): return "%d,%s,%s,%s"%(self.id,self.usuario,self.contras,self.nombre ,self.apellido)

4. Posteriormente en Views crea los mtodos de sesin de Usuario que en este ejemplo esta
como sesionuser.
def sesionuser(req): usuario=req.POST['usuario'] contra= req.POST['passwd'] try:

usus=Usuarios.objects.get(usuario=usuario,contras=contra) if usus!=None: print "el usuario existe" req.session['no']=usus.nombre req.session['ape']=usus.apellido return render_to_response("index.html",{"mensaje":req.session['no'] +" "+req.session['ape']}) else: print "usuario no existe" except:

5. Para visualizar en la web en Templates se crea una pgina html.


<html> <head> <title></title> </head> <body> <P>INICIO DE SESION</P> <form method="post" action="/verificar/"> <label>Usuario:</label> <input type="text" name="usuario"> <label>Contrasea</label><input type="password" name="passwd"> <input type="submit" value="'iniciar sesion'"> </form> {{ mensaje }} </body>

6.</html> Para terminar con la presentacin se establece las Urls


urlpatterns = patterns('', #esta verificara si los datos ingresados son correctos url(r'^verificar/$', sesionuser),

Usuarios e Identificaciones
La gestin de usuarios es un proceso bastante comn en todo proyecto, muchos desarrolladores han programado funcionalidades de autenticacin una y otra vez a lo largo de muchos aos y siempre funciona de la misma manera. Django quiere simplificarnos la vida y es por ello que viene ya con un sistema de autenticacin completo que gestiona cuentas de usuario, grupos, permisos, sesiones de usuario y cookies. El sistema de autenticacin de Django, tiene una documentacin muy completa incluyendo algunos ejemplos de uso. Abarcarlos todos puede complicar la didctica del curso, as que voy a implementar solamente estas funcionalidades que son ms frecuentes: Creacin de usuarios Autenticacin de usuarios

Acceso restringido Cierre de sesin

Debemos Iniciar primero creando un Nuevo Proyecto.

Ahora ponemos el nombre al Nuevo Proyecto

Escribir un Nombre para la Aplicacin

Clic en Ok.

El sistema de autenticacin necesita de django.contrib.auth. Por lo tanto, es necesario agregar estas lneas a nuestro views.py:

from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth import login, authenticate, logout from django.contrib.auth.decorators import login_required

Importamos la Libreria UserCreationForm en views

Creacin de usuarios: Para crear usuarios (sin la interfaz administrativa de Django), podemos usar el formulario que viene con Django, su nombre es UserCreationForm from django.contrib.auth. forms import UserCreationForm, AuthenticationForm que pertenece a django.contrib. auth.forms. Creamos la siguiente vista:

Ahora creamos la plantilla Usuarios.html, en la carpeta templates:

Tenemos la plantilla vaca:

Cambiamos por el siguiente cdigo para generar la plantilla.

Primeramente importamos la librera en urls.py

from Usuarios import views


Y agregamos la siguiente lnea a urls.py:

url(r'^index/', views.registro_usuarios),
Ahora configuramos la base de datos, con los respectivos datos

Para comprobar debemos levantar el servicio.

Una vez que no haya salido errores en la ejecucin, procedemos a acceder a travs de navegador.

Ejecutamos y aparecer para ingresar un Nuevo usuario, llenamos los datos, Clic en Enviar

Para guardar informacin de un Nuevo usuario, debemos sincronizar de la siguiente manera. En la pestaa Herramientas o Tools, hacemos clic en Run manage.py Task

Informacin del Nuevo Usuario

Para probar necesitamos Iniciar sesin.

Vamos a la base de datos y vemos los usuarios

Si deseamos editar un usuario debemos llenar la siguiente informacin

Permisos, grupos, mensajes y perfiles


Ahora vamos a crear la interfaz para el ingreso al sistema, para ello usaremos el formulario AuthenticationForm, que tambin pertenece a django.contrib.auth.forms y usaremos authenticate y login de django.contrib.auth.

Notar que existe una condicional que menciona is_active, eso nos indica que el usua rio puede que exista en el sistema, pero tambin debe estar activo para poder ingresar. Crearemos las plantillas (noactivo.html, nousuario.html e ingresar.html):

Ingresar:

No activo:

Privado:

Agregamos la siguiente lnea al urls.py:

url(r'^privado/$','CreacionUsuario.views.privado'), url(r'^nousuario/$','CreacionUsuario.views.ingresar'), url(r'^noactivo/$','CreacionUsuario.views.ingresar'), url(r'^cerrar/$','CreacionUsuario.views.cerrar'),


Cdigo en la vista:

Al probarlo ingresamos a la direccin http://127.0.0.1:8000/ingresar/, si tenemos un usuario inactivo (se puede activar o desactivar a un usuario desde la interfaz administrativa de Django), nos saldr el contenido de la plantilla noactivo.html, si nos equivocamos de credenciales saldra

nousuario.html y si le damos los datos adecuados, nos saldr el error 404, porque an no hemos creado la vista para (/privado). Autentificacin, pero errnea el usuario y contrasea

Usuario activo, le damos la bienvenida

INTEGRACION CON BASE DE DATOS Y APLICACIONES EXISTENTES Integracin con una base de datos existente
Django es un framework de desarrollo web muy adecuado para comenzar proyectos desde cero, pero a pesar de que Django favorece a los proyectos iniciados desde cero, es posible integrar el framework con bases de datos y aplicaciones existentes. La capa de base de datos de Django genera esquemas SQL desde cdigo Python pero con una base de datos existente, esos esquemas ya existen. En tal caso, se necesita crear modelos para las tablas de la base de datos existente. Para este propsito, Django incluye una herramienta que puede generar el cdigo del modelo leyendo el diseo de las tablas de la base de datos. Esta herramienta se llama inspectdb, y pude ser llamarla ejecutando el comando manage.py inspectdb.

Empleo de inspectdb La utilidad inspectdb realiza una introspeccin de la base de datos a la que apunta el archivo de configuracin del proyecto Django (settings.py), determina una representacin del modelo que usar Django para cada una de tus tablas, e imprime el cdigo Python del modelo en la consola del proyecto. Esta es una gua de un proceso tpico de integracin con una base de datos existente desde cero. Para el ejemplo se usar la el siguiente esquema de base de datos en postgres:

Nombre de base de datos: bdexistente

1. Crea el projecto de Django y una aplicacin:


File>New Project

2. Edita el diccionario DATABASES del archivo de configuracin del proyecto Django


(settings.py) para vincular la base de datos existente a la aplicacin. DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'bdexistente', 'USER': 'postgres', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': '', } }

3. Dirgete a Tools>Run manage.py Task... y ejecuta el comando inspectdb, acto seguido se


analizar la base de datos y se generarn los modelos correspondientes a cada tabla. El resultado aparecer en la consola de PyCharm, en la parte inferior del IDE.

4. Copia el cdigo generado en consola y pgalo en el archivo models.py de tu aplicacin. Este


es el cdigo generado de la base de datos en este ejemplo:
from __future__ import unicode_literals

from django.db import models

class Autores(models.Model): id_aut = models.CharField(max_length=10, primary_key=True) nombre_aut = models.CharField(max_length=20, blank=True) apellido_aut = models.CharField(max_length=20, blank=True) class Meta: db_table = 'Autores'

class Editores(models.Model): id_edi = models.CharField(max_length=10, primary_key=True) nombre_edi = models.CharField(max_length=15, blank=True) class Meta: db_table = 'Editores'

class LibroAutor(models.Model): id_aut = models.ForeignKey(Autores, null=True, db_column='id_aut', blank=True) id_lib = models.ForeignKey('Libros', null=True, db_column='id_lib', blank=True) class Meta: db_table = 'Libro_Autor'

class Libros(models.Model): id_lib = models.CharField(max_length=10, primary_key=True) titulo_lib = models.CharField(max_length=50, blank=True) id_edi = models.ForeignKey(Editores, null=True, db_column='id_edi', blank=True)

class Meta: db_table = 'Libros'

class Prueba(models.Model): id_tab = models.IntegerField(primary_key=True) # Field renamed because it was a Python reserved word. class_field = models.CharField(max_length=20, db_column='class', blank=True) campo = models.TextField(blank=True) # This field type is a guess. class Meta: db_table = 'Prueba'

5. Para probar la vinculacin de la aplicacin Django con la base de datos simplemente se har
uso de la consola del projecto en PyCharm

Tools>Run Django Console


Aparecer un prompt (>>>) en la consola inferior en PyCharm.

Ingresar el siguiente cdigo:


>>> from app_ejemplo.models import * >>> autor = Autores(id_aut="a001", nombre_aut="Napolen", apellido_aut="Hill") >>> autor.save() >>> a = Autores.objects.get(id_aut="a001") >>> a.apellido_aut

El resultado que se muestre en la consola deber ser: uHill.

Limpiar los modelos generados: Como podras esperar, la introspeccin de la base de datos no es perfecta, y necesitars hacer una pequea limpieza al cdigo del modelo resultante. Aqu hay algunos apuntes para lidiar con los modelos generados:

1. El comando inspectdb no puede detectar si un campo es autoincrementado, as que est en t


cambiar esto a AutoField, si es necesario. En nuestro ejemplo, en la tabla Prueba, su clave primaria es de autoincremento (tipo de dato serial en PostgreSQL); pero en el modelo de Django ese campo aparece como un Entero:
... class Prueba(models.Model): id_tab = models.IntegerField(primary_key=True) # Field renamed because it was a Python reserved word. class_field = models.CharField(max_length=20, db_column='class', blank=True) campo = models.TextField(blank=True) # This field type is a guess. class Meta: db_table = 'Prueba'

Para que Django lo tome como un campo de autoincremento debes hacer lo siguiente:
... class Prueba(models.Model): id_tab = models.AutoField(primary_key=True) # Field renamed because it was a Python reserved word. class_field = models.CharField(max_length=20, db_column='class', blank=True) campo = models.TextField(blank=True) # This field type is a guess. class Meta:

db_table = 'Prueba'

2. Cada tipo de campo (ej., CharField, DateField) es determinado mirando el tipo de la columna
de la base de datos (ej., VARCHAR, DATE). Si inspectdb no puede mapear un tipo de columna a un tipo de campo del modelo, usar TextField e insertar el comentario Python 'This field type is a guess.' a continuacin del campo en el modelo generado. Mantn un ojo en eso, y cambia el tipo de campo adecuadamente si es necesario. En este ejemplo el atributo campo del modelo Prueba es de tipo TextField, cuando en realidad en PostgreSQL es de tipo cidr (tipo de dato que almacena direcciones IP).
... class Prueba(models.Model): id_tab = models.AutoField(primary_key=True) # Field renamed because it was a Python reserved word. class_field = models.CharField(max_length=20, db_column='class', blank=True) campo = models.TextField(blank=True) # This field type is a guess. class Meta: db_table = 'Prueba'

Si un campo en tu base de datos no tiene un buen equivalente en Django, con seguridad puedes dejarlo fuera. La capa de modelo de Django no requiere que incluyas todos los campos de tu(s) tabla(s).

3. Si un nombre de columna de tu base de datos es una palabra reservada de Python (como pass,
class o for), inspectdb agregar '_field' al nombre del atributo y establecer el atributo db_column al nombre real del campo (ej., pass, class, o for). Por ejemplo, en el modelo Prueba de nuestra base de datos existe un campo llamado class, que en django es tomado como class_field. Ten en cuenta que como uno de los parmetros con los que se instancia ese campo es db_column='class', que es la referencia hacia el nombre original en la base de datos. inspectdb insertar el comentario Python 'Field renamed because it was a Python reserved word.' a continuacin del campo:

... class Prueba(models.Model): id_tab = models.AutoField(primary_key=True) # Field renamed because it was a Python reserved word. class_field = models.CharField(max_length=20, db_column='class', blank=True) campo = models.TextField(blank=True) # This field type is a guess. class Meta: db_table = 'Prueba'

4. Si tu base de datos contiene tablas que hacen referencia a otras tablas (como la mayora de
las bases de datos lo hacen), tal vez tengas que re-acomodar el orden de los modelos generados, de manera que los modelos que hacen referencia a otros modelos estn ordenados apropiadamente. Por ejemplo, el modelo LibrosAutor tiene una calve fornea al modelo Libros, el modelo Libros debe ser definido antes del modelo LibrosAutor. Si necesitas crear una relacin en un modelo que todava no est definido, puedes usar el nombre del modelo, en vez del objeto modelo en s.

5. inspectdb detecta claves primarias para PostgreSQL, MySQL y SQLite. Es decir, inserta
primary_key=True donde sea necesario. Para otras bases de datos, necesitars insertar primary_key=True para al menos un campo en cada modelo, ya que los modelos Django requieren tener un campo primary_key=True.

6. La deteccin de claves forneas slo funciona con PostgreSQL y con ciertos tipos de tablas
MySQL. En otros casos, los campos de clave fornea sern generados como campos IntegerField, asumiendo que la columna de clave fornea fue una columna INT.

Integracin con un sistema de autentificacin


Detrs de escena, Django mantiene una lista de back -ends de autentificacin que utiliza para autentificar. Cuando alguien llama a django.contrib.auth.authenticate(), Django intenta autentificar usando todos sus back-ends de autentificacin. Si el primer mtodo de autentificacin falla, Django intenta con el segundo, y as sucesivamente, hasta que todos los back-ends han sido intentados. La lista de back-ends de autentificacin a usar se especifica en la configuracin AUTHENTICATION_BACKENDS. sta debe ser una tupla de nombres de ruta Python que apuntan a clases que saben cmo autentificar. Estas clases pueden estar en cualquier lugar de tu ruta Python. AUTHENTICATION_BACKENDS no viene includo por defecto en las configuracines de settings.py, por ende es necesario aadirlo y tiene el siguiente formato:

AUTHENTICATION_BACKENDS = (
"paquete.autenticacion.backend",

El orden de AUTHENTICATION_BACKENDS se tiene en cuenta, por lo que si el mismo usuario y contrasea son vlidos en mltiples back-ends, Django detendr el procesamiento en la primera coincidencia positiva.

Escribir un back-end de autentificacin Un back-end de autentificacin es un clase que implementa dos mtodos: get_user(id) y authenticate(**credentials). El mtodo get_user recibe un id el cual podra ser un nombre de usuario, un ID de la base de datos o cualquier cosa y devuelve un objeto User. El mtodo authenticate recibe credenciales como argumentos de palabras clave. authenticate debe verificar las credenciales que recibe, y debe retornar un objeto User que coincide con esas credenciales, si las credenciales son vlidas. Si no son vlidas, debe retornar None. El sistema de administracin de Django est altamente acoplado a su propio objeto User respaldado por base de datos. La mejor manera de lidiar con esto es crear un objeto User de Django para cada usuario que existe en tu back-end. De cualquier manera puedes escribir un script para hacer esto por adelantado o tu mtodo de autentificacin puede hacerlo la primera vez que el usuario ingresa al sistema.

Aqu est un ejemplo de back-end que autentifica contra unas variables de usuario y contrasea definidas en tu archivo settings.py y crea un objeto User de Django la primera vez que un usuario se autentifica: 1. Aade las siguientes variables en cualquier lugar de settings.py:

ADMIN_LOGIN = "arielmcm" ADMIN_PASSWORD = "passlog"


2. Crea un directorio en la raz de tu proyecto llamado authbackend. 3. Crea un archivo llamado __init__.py dentro del directorio authbackend. 4. Crea un archivo llamado autenticacion.py dentro de authbackend. 5. Pega el siguiente cdigo en tu archivo autenticacion.py:
from django.conf import settings from django.contrib.auth.models import User

class SettingsBackend(object):

# Autentifica con ADMIN_LOGIN y ADMIN_PASSWORD de settings.py.

def authenticate(self, username=None, password=None): login_valido = (settings.ADMIN_LOGIN == username) pwd_valido = (password == settings.ADMIN_PASSWORD) if login_valido and pwd_valido: try: usuario = User.objects.get(username=username) except User.DoesNotExist: # Crea un Nuevo usuario. usuario = User(username=username, password=password) usuario.is_staff = True usuario.is_superuser = True usuario.save() return usuario return None

def get_user(self, user_id): try: return User.objects.get(id=user_id) except User.DoesNotExist: return None

6. Aade la tupla AUTHENTICATION_BACKENDS especificando el backend que acabas de crear:

AUTHENTICATION_BACKENDS = ( "authbackend.autenticacion.SettingsBackend", )

7. Crea una plantilla llamada aut.html en tu directorio templates con el siguiente cdigo de ejemplo:

<!DOCTYPE html> <html> <head> <title>AutBackend</title> </head> <body> <form action="/aut/" method="post"> <input type="text" name="usr"/> <input type="password" name="pass"/>

<input type="submit"/> </form> </body> </html>

8. Crea una vista llamada inicio la cual mostrar tu plantilla en el navegador:

from django.shortcuts import render_to_response def inicio(req): return render_to_response("aut.html")

9. Crea una url para la vista anteriormente creada:

... url(r'^$', inicio), ...

10. Crea una vista llamada aut, la cual se encargar de gestionar la autenticacin de la siguiente forma:
from django.contrib import auth from django.http.response import HttpResponse from django.shortcuts import render_to_response

def aut(r): usr = auth.authenticate(username=r.POST["usr"], password=r.POST["pass"]) if usr is not None: return HttpResponse("Autenticacion correcta!") else: return HttpResponse("Autenticacion incorrecta!")

11. Aade una url llamada aut de la siguiente forma:

... url(r'^aut/', aut), ...

12. Ejecuta el proyecto y en el navegador accede a localhost:8000. Llena los campos con datos correctos e incorrectos para comprobar tu backend de autenticacin.

Integracin de Django con Aplicaciones Web Existentes


Integracin de PHP y Django en Apache con mod_wsgi en la plataforma CentOS 6.3: Es posible ejecutar una aplicacin Django en el mismo servidor de una aplicacin impulsada por otra tecnologa. Para este ejemplo, se integrar una aplicacin de PHP (v5.3.3) junto con una de Django (v1.5.5) ambas funcionando bajo el servicio web Apache (v2.2). A ms de esto ser necesario un mdulo de Apache llamado mod_wsgi (v.3.2) que es el encargado de habilitar a Apache para servir sitios web desarrollados en Python. Cabe recalcar que Django funciona con Python y en este ejemplo se hace uso del intrprete en su versin 2.6.6.

Instalar recursos necesarios: Lo primero que se debe tomar en cuenta es la estrutura de directorios donde se alojarn las aplicaciones tanto de Django como de PHP. Se har uso del directorio /var/www de la siguiente manera:

/var/www |---sitios ____|---apps_wsgi ____|---www


Donde los directorios apps_wsgi y www sern destinados a alojar aplicaciones de Django y PHP respectivamente.

Crear estructura del directorio:

# mkdir p /var/www/sitios/apps_wsgi # mkdir /var/www/sitios/www

Instalar el servicio Apache:

# yum install httpd

Instalar el mdulo mod_wsgi:

# yum install mod_wsgi

Instalar Django: Primero descarga el comprimido Django-1.5.5.tar.gz, luego:

# tar xzvf Django-1.5.5.tar.gz # cd Django-1.5.5 # python setup.py install

Instalar PHP:

# yum install php

Configurar nombre de dominio del servidor (misitio.com):

# cat >> /etc/hosts 127.0.0.1 misitio.com

Configuraciones necesarias para integrar PHP y Django: 1. Aade lo siguiente al archivo httpd.conf (archivo de configuracin global de Apache). Abrir el archivo:

# gedit /etc/httpd/conf/httpd.conf

Cdigo a aadir:

WSGIRestrictStdout Off <VirtualHost *:80> LimitInternalRecursion 1000 ServerName misitio.com DocumentRoot /var/www/sitios/www/

ErrorLog /var/www/sitios/error.log LogLevel warn

<Directory "/var/www/sitios/www/"> Order allow,deny Allow from all </Directory>

AddHandler wsgi-script .wsgi WSGIScriptAlias /sitios/ "/var/www/sitios/www/sitio.wsgi" <Directory "/var/www/sitios/apps_wsgi/"> AllowOverride FileInfo Options ExecCGI MultiViews FollowSymLinks MultiviewsMatch Handlers Order deny,allow Allow from all </Directory> </VirtualHost>

Inicia el servicio de Apache para verificar que no haya errores hasta el momento:

# service httpd start

2. Crear un proyecto de Django que correr en el servidor:

# cd /var/www/sitios/apps_wsgi # django-admin.py startproject sitiodjango

3. Crear el archivo sitio.wsgi, el cual contendr un script que proporcionar a Apache el acceso a la aplicacin Django que se ha creado. # cat > /var/www/sitios/www/sitio.wsgi import os, sys sys.path.append('/var/www/sitios/apps_wsgi/sitiodjango') os.environ['DJANGO_SETTINGS_MODULE'] = 'sitiodjango.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()

Presionar dos veces Ctrl+D para cerrar el archivo.

4. Crear un archivo .htaccess dentro de /var/www/sitios/www. Este archivo utiliza el mdulo mod_rewrite de Apache para gestionar todas las urls accedidas desde el cliente, .htaccess comprueba todas las peticiones hechas al servidor y si no existe una coincidencia de url para PHP, quien se hace cargo de gestionar esa url es Django.
# cat > /var/www/sitios/www/.htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /var/www/sitios/www/sitio.wsgi/$1 [QSA,PT,L]

Presionar dos veces Ctrl+D para cerrar el archivo. Comprobar la integracin de PHP y Django Para comprobar que las configuraciones han sido correctas cree un archivo llamado info.php (puede ser cualquier nombre) dentro del directorio php:

# cat > /var/www/sitios/www/info.php <?php phpinfo(); ?>

Reinicia el servicio Apache:

# service httpd restart

Ve a tu navegador e ingresa a misitio.com, se deber mostrar la pgina inicial por defecto de Django. Ahora ingresa a misitio.com/info.php, y se deber mostrar informacin sobre tu versin de PHP entre otras cosas.

Reflexionar: Qu cosas fueron difciles? En realidad la clase ha sido amena y entendible aunque temas como: Integracin con un sistema de autentificacin, Integracin con aplicaciones web existentes, resultarn un poco complejos. Cules fueron fciles? Temas como: Cookies, Entorno de sesiones, Usuarios e identificaciones, Permisos, grupos, mensajes y perfiles. Por qu? Por ser conocimientos generales no se han encontrado problemas considerables. Qu aprend hoy? Aprend acerca de Sesiones, usuario e inscripciones, Integracin con Base de Datos y aplicaciones existentes.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

15 2 horas

PERODO

13/01/2013 al 18/01/2014

Martes, 14 de Enero del 2014 Ing. Mariuxi Zea Ordoez Seguridad en la Web Inyeccin de SQL Cross-Site Request Forgery Session Forging/Hijacking

Contenidos:

Seguridad en la Web Inyeccin de SQL Cross-Site Request Forgery Session Forging/Hijacking

Objetivos de desempeo: Describe conceptos, terminologa y destrezas sobre los temas a tratarse en esta unidad. Competencia General: Identificar los objetivos del mdulo. Datos interesantes discutidos: Actividades durante la clase Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos el manejo de la seguridad.

Descriptores analizados Forgery, Hijacking, Seguridad, Inyeccin. Resumen conceptual de lo que se vio, incluyendo imgenes, etc.

SEGURIDAD Seguridad en la web


Todo desarrollador Web necesita considerar la seguridad como un aspecto fundamental de la programacin Web. Desafortunadamente, se da el caso de que implementar la seguridad es difcil, los atacantes slo necesitan encontrar una nica vulnerabilidad, pero los defensores deben proteger todas y cada una. Django intenta mitigar esta dificultad. Est diseado para protegerte automticamente de muchos de los errores de seguridad comunes. Aun as, es importante entender de qu se tratan dichos problemas, cmo es que Django te protege, y esto es lo ms importante los pasos que puedes tomar para hacer tu cdigo an ms seguro.

Inyeccin de SQL
La inyeccin de SQL es un exploit comn en el cual un atacante altera los parmetros de la pgina (tales como datos de GET/POST o URLs) para insertar fragmentos arbitrarios de SQL que una aplicacin Web ingenua ejecuta directamente en su base de datos. Es probablemente la ms peligrosa y, desafortunadamente una de las ms comunes vulnerabilidad existente. Esta vulnerabilidad se presenta ms comnmente cuando se est construyendo SQL a mano a partir de datos ingresados por el usuario. Por ejemplo, imaginemos que se escribe una funcin para obtener una lista de informacin de contacto desde una pgina de bsqueda. Para prevenir que los spammers lean todas las direcciones de email en nuestro sistema, vamos a exigir al usuario que escriba el nombre de usuario del cual quiere conocer sus datos antes de proveerle la direccin de email respectiva:

def user_contacts(request): user = request.GET['username'] sql = "SELECT * FROM user_contacts WHERE username = '%s';" % username # execute the SQL here... Primero, nuestro intento de proteger nuestra lista de emails completa va a fallar con una consulta construida en forma ingeniosa. Pensemos acerca de qu sucede si un atacante escribe "'OR 'a'='a" en la caja de bsqueda. En ese caso, la consulta que la interpolacin construir ser:

SELECT * FROM user_contacts WHERE username = '' OR 'a' = 'a';

Debido a que hemos permitido SQL sin proteccin en la string, la clusula OR agregada por el atacante logra que se retornen todas los registros.

La solucin:
La API de base de datos de Django hace esto por ti. Escapa automticamente todos los parmetros especiales SQL, de acuerdo a las convenciones de uso de comillas del servidor de base de datos que ests usando (por ejemplo, PostgreSQL o MySQL). Por ejemplo, en esta llamada a la API: foo.get_list(bar__exact="' OR 1=1") Django escapar la entrada apropiadamente, resultando en una sentencia como esta: SELECT * FROM foos WHERE bar = '\' OR 1=1'

Cross-Site Request Forgery


La Cross-site request forgery (CSRF) (Falsificacin de peticiones inter-sitio) sucede cuando un sitio Web malicioso engaa a los usuarios y los induce a visitar una URL desde un sitio ante el cual ya se han autenticado por lo tanto saca provecho de su condicin de usuario ya autenticado.

Cmo puede tu sitio defenderse de este exploit? 1. Usar peticiones POST 2. Dotar a cada <form> que se enviar va POST un campo oculto cuyo valor sea secreto utilice el csrf_token etiqueta 3.Para activar esta proteccin, agrega 'django.contrib.csrf.middleware.CsrfMiddleware 4. utilizando el procesador de contexto: 'django.core.context_processors.csrf'.

Inyeccin de cabeceras de email


La inyeccin de cabeceras de email, toma control de formularios Web que envan emails. Un atacante puede usar esta tcnica para enviar spam mediante tu servidor de email. Cualquier formulario que construya cabeceras de email a partir de datos de un formulario Web es vulnerable a este tipo de ataque.

La solucin:

Podemos prevenir este ataque de la misma manera en la que prevenimos la inyeccin de SQL: escapando o verificando siempre el contenido enviado por el usuario. Las funciones de mail incluidas en Django (en django.core.mail) simplemente no permiten saltos de lnea en ninguno de los campos usados para construir cabeceras (las direcciones de y para, ms el asunto). Si intentas usar django.core.mail.send_mail con un asunto que contenga saltos de lnea, Django arrojar una excepcin BadHeaderError. Si no usas las funciones de email de Django para enviar email, necesitars asegurarte de que los saltos de lnea en las cabeceras o causan un error o son eliminados. Podras querer examinar la clase SafeMIMEText en django.core.mail para ver cmo implementa esto Django.
1

http://django-book.mkaufmann.com.ar/chapter19.html#inyeccion-de-sql

Inyeccin de sql
1. Creamos una base de datos

Mostrar la siguiente ventana en donde pondremos el nombre de nuestra base de datos y damos click en ok.

Ahora observemos que nuestra base de datos ha sido creada, pero al desplegar observemos que no tenemos ninguna tabla creada, para esto lo siguiente:

2. Ejecutamos Pycharm y escogemos crear un nuevo proyecto

3. Se despliega la siguiente ventana en done ubicaremos el nombre de nuestro proyecto y en el tipo de proyecto escogemos Django project y damos ok

4. Se presenta otra ventana en done ahora nos pide que pongamos un nombre a nuestra aplicacin y damos ok.

5. Lo primero y lo ms importante de toda la configuracin para la conexin y nos dirigimos a la pestaa settings.py y adems comentamos la siguiente lnea de cdigo

6. Ahora desde el men tool y seleccionamos Run manage.py para que se creen las tablas.

7. Despues nos dirigimos a la pestaa models.py que se encuentra en la aplicacin que creamos y escribimos el siguiente codigo para crear una tabla llamada usuario.

8. Ahora desde el men tool y seleccionamos Run manage.py para que se cree la tabla usuario. La tabla creada siempre se asigna con el nombre de la aplicacin en este caso ser inyecciones_usuario

9. Una vez creada esa tabla le asignamos los valores que son el nombre de usuario y su contrasea

Pestaa Templete 10. Crearemos una plantilla login y escribimos el siguiente cdigo html para mostrar las cajas de texto de usuario, password y el botn llamado iniciar sesin

Un formulario HTML con tres campos de entrada, dos campos de texto y un botn de envo:

La etiqueta <input> especifica un campo de entrada donde el usuario puede introducir datos. Type especifica el tipo de elemento Name especifica el nombre de un elemento Placeholder especifica una cabecera que indica el nombre del elemento

Pestaa vista: 11. En esta pestaa importamos las libreras necesarias y adems importamos el modelo que se encuentra en la aplicacin llamada inyecciones.

12. Creamos una funcin llamada inicio para que al momento de cargar la pgina se muestre el inicio de sesin

Pestaa url: 13. En esta pestaa primero importamos la vista con la siguiente lines de codigo que se muestra en la imgen

14. Ahora crearemos el url con el nombre que escogimos de la funcin que se defini en la pestaa vista

Y si ejecutamos el proyecto esta es la ventana que se mostrara en el inicio

15. Escribimos este cdigo en la pestaa views en donde creamos una funcin para logearnos si el usuario y contrasea son incorrectas el usuario no se logueara y le mostrara un mensaje que indicara usuario no encontrado caso contrario si son correctos los datos el usuario iniciara sesin y mostrara un mensaje BIENVENIDO esta funcin es lo que hace Django que permite bloquear cualquier sentencia de SQL

16. As mismo creamos otra url con el nombre que escogimos y en que funcin esta de esta forma:

Funciones con sentencia SQL: 17. Primero crearemos una funcin llamada consulta,

cursor.execute () utiliza marcadores de posicin, "% s", en lugar de agregar los parmetros

directamente en el SQL 18. As mismo crearemos otra url con el nombre consulta

url(r'^consulta/',consulta), 19. Para llamar a esta consulta debemos cambiar donde est logueo por consulta

Desde el navegador: Datos ingresados correctamente:

Datos incorrectos:

Ahora si introducimos cdigo sql el resultado ser el siguiente:

Anlisis: La API de base de datos de Django. Escapa automticamente todos los parmetros especiales SQL, de acuerdo a las convenciones de uso de comillas del servidor de base de datos que ests usando.

Cross-Site Request Forgery:


1. Ejecutamos Pycharm y escogemos crear un nuevo proyecto

2. Se despliega la siguiente ventana en done ubicaremos el nombre de nuestro proyecto y en el tipo de proyecto escogemos Django project y damos ok 3. Se presenta otra ventana en done ahora nos pide que pongamos un nombre a nuestra aplicacin y damos ok.

4. Ahora nos dirigimos a la pestaa Settings y escribimos el siguiente cdigo en la ltima parte pero antes debemos aadir la siguiente lnea para utilizar el csrf.

5. En la pestaa view importamos las siguientes libreras y escribimos las siguientes funciones

6. Ahora en la pestaa templete creamos nuestra plantilla que se llamara inicio

En cualquier plantilla que utilice un formulario POST, utilice el csrf_token etiqueta en el interior del elemento <form>

7. Creamos las url e importamos la vista from appCsrf.views import *

8. Creamos otra plantilla llamada post

Desde el navegador utilizando csrf:

Sin utilizar csrf:

Reflexionar: Qu cosas fueron difciles? En realidad la clase ha sido amena y entendible aunque temas como: Cross-Site Request Forgery, Session Forging/Hijacking, resultarn un poco complejos. Cules fueron fciles? Temas como: Seguridad en la Web, Inyeccin de SQL.

Por qu? Por ser conocimientos generales no se han encontrado problemas considerables. Qu aprend hoy? Aprend acerca de Seguridad en la Web, Inyeccin de SQL, Cross-Site Request Forgery, Session Forging/Hijacking.

CLASE N: TIEMPO: FECHA: DOCENTE GUA: TEMA DISCUTIDO:

16 2 horas

PERODO

20/01/2013 al 25/01/2014

Martes, 21 de Enero del 2014 Ing. Mariuxi Zea Ordoez Puesta en marcha de Django en un servidor Servidor Heroku

Contenidos:

Puesta en marcha de Django en un servidor Usando Django con Apache y mod_python Usando Django con FastCGI Escalamiento

Objetivos de desempeo: Describe conceptos, terminologa y destrezas sobre los temas a tratarse en esta unidad. Competencia General: Identificar los objetivos del mdulo. Datos interesantes discutidos: Actividades durante la clase Investigaciones para profundizar los temas. Exposiciones grupales para explicar con ejemplos la puesta en marcha de Django.

Descriptores analizados Apache, Escalamiento. Resumen conceptual de lo que se vio, incluyendo imgenes, etc.

PUESTA EN MARCHA DE DJANGO EN UN SERVIDOR HEROKU:


Heroku es una Plataforma de aplicaciones en la nube, no posee servidores propios, sino que los contrata de la nube EC2 de Amazon. Heroku nos permite habilitar escalar nuestra aplicacin de una forma bastante sencilla. La cuenta bsica en Heroku es gratuita. Cada aplicacin que se cree dispone de una base PostgrasSQL de 5MB. Requisitos previos:

Conocimiento en Python Conocimiento en el framework en este caso Django Conocimiento bsico sobre git virtualenv + pip Cuenta en heroku.com (es gratis)

Primeros pasos en Heroku: Primero debemos crearnos una cuenta en Heroku, para eso seguimos los siguientes pasos: 1) Creamos una cuenta en Heroku.

2) Creando entorno virtual En la ruta de su proyecto ejecutamos el siguiente comando para crear un entorno virtual. virtualenv venv

Para utilizar el nuevo virtualenv, necesitamos activarlo. (Usted debe establecer la fuente del entorno virtualenv para cada sesin de terminal en la que desea ejecutar la aplicacin.) En Windows

source venv/bin/activate (Linux) venv\Scripts\activate.bat ( Desde su virtualenv: Instalando dependencias (venv)$ pip install django

A continuacin, instalamos las dependencias de nuestra aplicacin con la pip. En este caso, vamos a instalar django-toolbelt, que incluye todos los paquetes que necesitamos: Django (el framework web) Gunicorn (servidor WSGI) dj-database-url (un ayudante de configuracin de Django) dj-esttica (un servidor de archivos estticos Django Instalando Heroku-Toolbelt Para instalar heroku toolbelt ve a la pgina https://toolbelt.heroku.com/

Ahora que tenemos un ambiente Python para trabajar, vamos a crear nuestra sencilla aplicacin Django. No se olvidar poner el punto (. ) al final. Esto le dice a Django que poner el extracto de la en el directorio actual, en vez de ponerlo en un nuevo subdirectorio.

django-admin.py startproject hellodjango .

Declarar los tipos de procesos con procfile: Un Procfile es un archivo de texto en el directorio raz de la aplicacin, para declarar explcitamente el comando que debera ser ejecutado para iniciar las pruebas en web. En este caso, es necesario ejecutar Gunicorn con algunos argumentos.

Se puede iniciar los procesos en el procfile localmente usando Foreman (instalado como parte de la Toolbelt) foreman start 2013-04-03 16:11:22 [8469] [INFO] Starting gunicorn 0.17.2 2013-04-03 16:11:22 [8469] [INFO] Listening at: http://127.0.0.1:8000 (8469) Especifique dependencias con Pip: Heroku reconoce aplicaciones Python por la existencia de un archivo requirements.txt en la raz de un repositorio. Este formato simple es utilizado por la mayora de los proyectos de Python para especificar los mdulos de Python externos requiera la aplicacin. Creando requirements.txt: Una vez instalado todos paquetes necesarios para correr tu app, es necesario crear un archivo llamado requirements.txt para que heroku pueda instalar todos los paquetes necesarios. (venv)$ pip freeze > requirements.txt

Requeriments.txt Django==1.6 dj-database-url==0.2.2 dj-static==0.0.5 gunicorn==18.0 psycopg2==2.5.1

static==0.4 wsgiref==0.1.2

Django setinngs A continuacin, configure la aplicacin para el entorno Heroku, base de datos Postgres de including Heroku. El mdulo de dj-database-url analizar los valores de la variable de entorno DATABASE_URL y convertirlas en algo Django puede entender. Asegrese de 'dj-database-url' est en el archivo de requisitos, a continuacin, aadir lo siguiente al final de su archivo settings.py: settings.py Son ajustes disponibles, que permitan agregar el siguiente cdigo al wsgi.py para servir archivos estticos en la produccin: Configurando base de datos (venv)$ pip install psycopg2 dj-database-url

Al final del archivo settings.py puedes poner el siguiente cdigo para configurar tu base de datos en heroku.

import dj_database_url DATABASES['default'] = dj_database_url. Config()

Heroku te ofrece por defecto una base de datos PostgreSQL con un lmite de 10,000 registros. Con la posibilidad de aumentar el limite a cambio de un pequeo pago. Wgsi.py from django.core.wsgi import get_wsgi_application from dj_static import Cling application = Cling(get_wsgi_application())

Creando .gitignore .gitignore es un archivo de texto plano donde por cada linea puedes poner un patrn a ignorar una vez que tengamos el repositorio. Usualmente el contenido de m .gitignore es: venv *.pyc *.pyo A continuacin, vamos a crear un nuevo repositorio git y guardar los cambios.

Iniciando repositorio Una vez hecho todo lo anterior podemos crear nuestro repositorio Cdigo: git init # Iniciamos el repositorio git add . # Aadirnos todos los archivos al ndice git commit -m 'Iniciar Commit' # Hago el primer comit, para guardar todos los cambios

Implementando heroku heroku create Creating simple-spring-9999... done, stack is cedar http://simple-spring-9999.herokuapp.com/ | git@heroku.com:simple-spring-9999.git Git remote heroku added Esto crea una app en heroku y aade el remoto de la app a tu repositorio.git push heroku master Se ha implementado el cdigo para Heroku, y ha especificado los tipos de proceso en un Procfile. Ahora puede instruir Heroku para ejecutar un tipo de proceso. Heroku hace esto mediante la ejecucin del comando asociado en un banco de pruebas - un contenedor ligero que es la unidad bsica de la composicin sobre Heroku. Ahora podemos visitar la aplicacin en nuestro navegador con heroku abierto. En el navegador escribimos el nombre de nuestra aplicacin:

Navegando en la Aplicacin buscador alojada en el servidor de Heroku

Ilustracin 28 Ejecucion de la Aplicacin en Servidor Heroku

Bsqueda de registros en la Aplicacin

Reflexionar: Qu cosas fueron difciles? Usar Django con Apache y mod_python. Cules fueron fciles? Usar Django con FastCGI, Escalamiento, resultarn un poco complejos. Por qu? Por ser conocimientos generales no se han encontrado problemas considerables. Qu aprend hoy? Usar Django con Apache y mod_python.

PROYECTO FINAL

GUIA DE PRESENTACIN DE PROYECTOS DE VINCULACIN CON LA COLECTIVIDAD AO 2013

1. IDENTIFICACIN DEL PROYECTO

1.1. Nombre del Proyecto:

ANALISIS, DISEO E IMPLEMENTACION DE UN SITIO WEB INFORMATIVO Y ADMINISTRATIVO PARA LA TORRE MDICA LA CAROLINA. Universidad Tcnica de Machala

1.2. Unidad acadmica:

1.3. Unidad Ejecutora: Escuela de Informtica 1.4. Programa de la Carrera: Ingeniera de Sistemas

1.5. Lnea de investigacin de la carrera: Ingeniera de Software 1.6. Organismo que aprob el proyecto (adjuntar la resolucin de aprobacin) 1.7. Organismos y/o Entidades co-participantes: Torre Medica La Carolina 2. LOCALIZACIN GEOGRFICA
Marcel Laniado (10ma Oeste), Machala

3. BENEFICIARIOS
Departamentos mdicos.

Mdicos. Pacientes. Secretaria. 4. REA DE CONOCIMIENTO (segn Anexo N 1) Ciencia

5. SUBREA DE CONOCIMIENTO (segn Anexo N 1) Informtica 6. OBJETIVO GENERAL Desarrollar e implementar un portal web informativo y administrativo para el manejo y gestin de la informacin de pacientes de la Torre Mdica La Carolina. 7. OBJETIVOS ESPECFICOS Digitalizacin de los historiales de cada uno de los pacientes. Agilitar los procesos de mantenimiento de la informacin de los pacientes. Generar reportes para el control de reservacin de turnos a los pacientes. 8. ALCANCE El sistema permitir la gestin de historiales de cada paciente. El mdico de cada departamento podr gestionar datos de los pacientes de cada entidad. Agilidad y eficiencia en los trmites (realizacin de diagnsticos) realizados. Organizacin y clasificacin de las tareas. Comprender un portal web de Gestin Administrativo y de informacin para usuarios y administradores.

9. MARCO TERICO 9.1. Antecedentes Datos de la Institucin.-

Nombre :

CLINICA TORRE MEDICA LA CAROLINA

Direccin: Circunvalacin Norte y Marcel Laniado Telfonos: 2981-060 Web:


https://www.facebook.com/pages/Clinica-de-Traumatologia-Torre-

M%C3%A8dica-La-Carolina/404746919851

Funcin de la Entidad.La Torre Medica La Carolina, presta atencin mdica a toda la comunidad orense y del pas, a travs de servicios de calidad eficientes y transparentes con la participacin activa de la ciudadana a fin de lograr el buen vivir.

MISIN

Hacer sentir a nuestros pacientes que su salud est en las mejores manos. Elevando permanentemente la calidad y eficiencia de nuestro servicio. Combinando nuestra calidez en la atencin, nuestra pasin por la medicina y la innovacin en los procedimientos mdicos. VISIN

Ser la Red de servicios de salud privada de referencia en el pas, por contar con mdicos especialistas excelentes, con valores ticos y morales.

Problemtica.-

Algunos de los departamentos aun manejan procesos como el mantenimiento del historial de los pacientes, medicacin, certificados etc. De forma manual. Impacto. El proyecto beneficiar a la Ciudadana en especial del Cantn Machala de la Provincia de El Oro con el mejoramiento de los procesos de consultas mdicas, gestin de historial de pacientes, agilidad al prescribir una receta y emisin de certificados. 9.2. Convenio de respaldo

10. METODOLOGA

10.1.

Tipo de actividades a desarrollar: - Mantenimiento de tablas (procesos de ingresar, modificar, guardar, eliminar). - Reservacin de turnos - Impresin de certificados. - Impresin de reportes de historial.

10.2.

Estrategias de trabajo: Distribucin del trabajo en el equipo por mdulos para agilitar el desarrollo del mismo.

10.3.

Materiales / Tcnicas a emplear: Investigacin de Campo Observacin Entrevista

11. RESULTADOS ESPERADOS Mejorar la atencin de los usuarios.

Optimizar el tiempo al momento de llenar los formularios segn el trmite que se vaya a realizar. El mdico podr realizar los trmites de manera rpida y eficaz. Digitalizar procesos antes realizados manualmente. 12. PERSONAL DEDICADO AL PROYECTO 12.1. Director del Proyecto Apellidos y Nombres: Ing. Mg,sc. Mariuxi P. Zea Ordoez Ttulo Profesional: Ingeniera de Sistemas Carga Horaria afectada al proyecto: 2 meses 12.2. Desarrollador y Analista Apellidos y Nombres: Toro Lpez Erika Anabel Carga Horaria afectada al proyecto: 2 meses 12.3. Desarrollador y Analista Apellidos y Nombres: Yunga Quezada Romel Alejandro Carga Horaria afectada al proyecto: 2 meses 12.4. Desarrollador y Analista Apellidos y Nombres: Risco Ramrez Jorge Andrs Carga Horaria afectada al proyecto: 2 meses 12.5. Desarrollador y Analista Apellidos y Nombres: Snchez Liendres Roxana Elizabeth Carga Horaria afectada al proyecto: 2 meses 12.6 Desarrollador y Analista Apellidos y Nombres: Salinas Pineda Lia Cecibel Carga Horaria afectada al proyecto: 2 meses 12.7. Desarrollador y Analista Apellidos y Nombres: Olaya Matute Douglas Damin Carga Horaria afectada al proyecto: 2 meses

12.8. Otras Instituciones participantes Nombre de la Institucin: Torre Medica La Carolina 13. PRESUPUESTO Y EQUIPAMIENTO

13.1. Presupuesto:

MATERIALES Hojas Libros Cd Tinta Total Equipo Tecnolgico Computadoras personales 2,50 c/h (4 horas diarios x 40 das) Internet 0,80 c/h (2 horas diarias x 40 das) Total

RUBRO 10,00 20,00 2,00 5,00 27,00

400,00

64,00 464,00

Total General

RUBRO

Materiales Recurso Tecnolgico Transporte Imprevistos A,B,C

27,00 464,00 25,00 24,55

Total

540,55

13.2. Fuentes de financiamiento;

Proyecto Autofinanciado.

14. PLAN DE ACTIVIDADES

14.1. Actividades

Integracin de grupos Planteamiento del tema Bsqueda de la institucin Obtencin de conocimientos bsicos Recopilacin de requisitos: Entrevista Clasificacin de la informacin Inicio del diseo principal del portal. Desarrollo de los mdulos Pruebas tcnicas del software de la pgina.

14.2. Cronograma

15. CONCLUSIN El diseo e implementacin del Portal Web permitir a la Institucin mejorar los procesos administrativos. La elaboracin de esta Herramienta de Software fomentara a que la comunidad orense conozca y acceda a los servicios prestados por la Torre Mdica La Carolina. El trabajo distribuido en grupos de trabajo agiliza la realizacin del proyecto.

16. INFORME

PANTALLA INICIAL ANALISIS, DISEO E IMPLEMENTACION DE UN SITIO WEB INFORMATIVO Y ADMINISTRATIVO PARA LA TORRE MDICA LA CAROLINA.

Pantalla inicial en la que permitir seleccionar el centro deseado.

Al posicionar el mouse sobre la unidad mdica se presentara el nombre de la misma y al dar clic sobre esta. Ingresara al sistema

DESCRIPCION DE MENU

Al dar clic sobre inicio se presentara la siguiente pantalla de bienvenida.

Con informacin del mdico. En el men de institucin, permitir visualizar tanto la visin como la misin y objetivos de la entidad.

Misin

Visin

DENTRO DE CADA HOSPITAL

Podemos cambiar de unidad mdica

Con solo posicionarse en la parte lateral izquierda se presentara una pestaa en la que se selecciona el hospital deseado presentndose como pantalla inicial del mismo las citas mdicas de la unidad seleccionada.

ANEXO N 1

AREA DE CONOCIMIENTO

SUBAREA DE CONOCIMIENTO
PROGRAMAS BASICOS PROGRAMAS DE ALFABETIZACION Y DE ARITMETICA DESARROLLO PERSONAL FORMACION DE PERSONAL DOCENTE

PROGRAMAS GENERALES

EDUCACION

CIENCIAS DE LA EDUCACION ARTES

HUMANIDADES Y ARTE

HUMANIDADES CIENCIAS SOCIALES Y DEL COMPORTAMIENTO PERIODISMO E INFORMACION

CIENCIAS SOCIALES, EDUCACION COMERCIAL Y DERECHO

EDUCACION COMERCIAL Y ADMINISTRACION DERECHO CIENCIAS DE LA VIDA MATEMATICAS Y ESTADISTICA CIENCIAS FISICAS

CIENCIAS

INFORMATICA INGENIERIA Y PROFESIONES AFINES INDUSTRIA Y PRODUCCION

INGENIERIA, INDUSTRIA Y CONSTRUCCION AGRICULTURA

ARQUITECTURA Y CONSTRUCCION AGRICULTURA, SILVICULTURA Y PESCA VETERINARIA MEDICINA

SALUD Y SERVICIOS SOCIALES

SERVICIOS SOCIALES SERVICIOS PERSONALES SERVICIOS DE TRANSPORTE PROTECCION DEL MEDIO AMBIENTE

SERVICIOS

SERVICIOS DE SEGURIDAD

You might also like