Laboratorio
#7:
Python
Flask
Laboratorio #7: Python Flask
Introduccin
El modelo cliente servidor como hemos venido estudiando, se puede
representar de manera bsica como:
El procesamiento del lado del servidor, inicialmente retornaba paginas HTML
estticas, es decir:
No hay casi procesamiento del lado del servidor.
No hay estado.
El usuario no introduca ningn dato.
Despus vino CGI (Common Gateway Interface), con esto:
El servidor invocaba un programa en cada peticin.
El programa obtena los datos del cliente por stdin y mostraba HTML a
travs de stdout.
Paginas HTML dinmicas.
Entonces vinieron muchos frameworks del lado del servidor:
Django, ASP .NET, Spring, Ruby on Rails, Catalyst, Express, etc.
Mucha mas flexibilidad y extensibilidad que con CGI.
Suelen separar lgica, presentacin y base de datos.
Grupo Docente ATI
Laboratorio
#7:
Python
Flask
Si a nuestro esquema de cliente servidor anterior le agregamos una base de
datos se transformara en algo como esto:
Este esquema trae beneficios como modularidad,
escalabilidad.
mejor confiabilidad y
Nuestro caso de estudio del lado del servidor ser el microframework: Python
Flask.
Flask
Flask es un microframework basado en Python, Werkzeug y Jinja2.
"Micro" no significa que su aplicacin web tiene que encajar en un nico
archivo de Python, aunque ciertamente puede. Tampoco significa que Flask
carece de funcionalidad. El "micro" en microframework significa que Flask tiene
como objetivo mantener el ncleo simple pero extensible. Flask no toma
muchas decisiones por ti, tales como la base de datos utilizar. Esas decisiones
que si hace por ti, como lo es el motor de plantillas (template) para usar, son
fciles de cambiar. Todo lo dems depende de ti, de modo que Flask puede ser
todo lo que necesitas y nada que no desees.
De forma predeterminada, Flask no incluye una capa de abstraccin de base
de datos, validacin de formularios o cualquier otra cosa que ya existe en
diferentes libreras. En su lugar, Flask soporta extensiones para agregar esta
funcionalidad a la aplicacin como si se hubiese implementado en el mismo
microframework. Numerosas extensiones proporcionan la integracin de bases
de datos, validacin de formularios, carga de archivos, varias tecnologas de
autenticacin, etc.
Python
Python es un lenguaje dinmico e interpretado:
Su cdigo fuente no declara los tipos de datos (variables, parmetros o
mtodos).
Python obtiene el tipo de dato en tiempo de ejecucin.
Se elimina el tiempo de compilacin.
Grupo Docente ATI
Laboratorio
#7:
Python
Flask
Es un lenguaje multiparadigma, es decir, Pyhton se adapta al programador:
Paradigma Funcional.
Paradigma Imperativo.
Paradigma Orientado a Objetos.
Python posee un interprete donde se pueden escribir sentencias Python:
3
Se pueden escribir modulos de Python en C o C++.
Es identado. Python no separa por llaves ({ }) ni culmina en punto y coma (;),
Python identa, por ejemplo:
Obtendramos: Hello\nHello\nWorld\n
Legibilidad y facilidad:
Werkzeug
Werkzeug es una librera WSGI (Web Server Gateway Interface) para Python.
Un WSGI no es mas que una especificacin para una interfaz simple y genrica
entre los servidores web y aplicaciones web o frameworks.
La ventaja que nos provee esta librera es bsicamente olvidarnos de que
servidor web esta corriendo nuestra aplicacin. Antes se sola programar
especficamente para solo CGI o mod_python (Apache) o cualquier otra API
custom de un web server. Con Werkzeug tenemos esa interfaz de bajo nivel
que nos permite desarrollo de aplicaciones web porttiles.
Grupo Docente ATI
Laboratorio
#7:
Python
Flask
Jinja2
Jinja2 es un motor de plantillas con todas las caractersticas de Python.
Un ejemplo:
Bsicamente lo que hace es combinar HTML con cdigo Python y es lo que
podemos observar en la lneas entre llaves y porcentaje ( {% %} ). En este caso
Jinja2 trabaja terminando las sentencias con la palabra end.
De igual forma si colocamos sentencias entre dobles llaves ( {{ }} ) Jinja2 va a
imprimir el resultado de evaluar lo que sea que se haya puesto dentro de las
llaves.
Referencias
https://www.python.org/doc/
http://flask.pocoo.org/
http://werkzeug.pocoo.org/
http://jinja.pocoo.org/
http://en.wikipedia.org/wiki/Web_template_system
http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface
https://github.com/Gringox/hello_flask
Grupo Docente ATI