Desarrollo De Una Aplicacion Web Con Flask Y Postgresql
Flask es un web framework en Python que da las capacidades mínimas de creación de aplicaciones web, se le denomina un framework mínimo porque sólo provee la funcionalidad mínima para operar un servicio web y en general la mayor parte de las diferentes funcionalidades puede ser manejada con paquetes externos o extensiones. Existen diferentes tipos de aplicaciones web que se pueden generar con Flask, ya sean APIs RESTful que sirvan JSON, aplicaciones web sencillas que sirvan sólo HTML, o aplicaciones web completas que se comuniquen a bases de datos o sistemas de archivos y generen HTML.
Ejemplo de una aplicación mínima en Flask
Como primer ejemplo vamos a generar una aplicación de Flask mínima que nos sirva una página web sencilla.
como primer paso vamos a crear una carpeta con el nombre de nuestra app y entrar a esa carpeta
$ mkdir simplewebapp
$ cd simplewebapp
Posteriormente vamos a generar un ambiente virtual para correr nuestra app para esto debemos revisar nuestra versión de python y tener instalado venv.
$ python3.7 -m venv venv
Activamos nuestro ambiente virtual e instalamos las dependencias
$ source venv/bin/activate
(venv)$ pip install Flask
(venv)$ pip install wheel
Ahora podemos crear nuestro programa de la app como simplewebapp.py
from flask import Flask
"""
Simple Flask app serving a static webpage
"""
app = Flask(__name__)
@app.route("/")
def indexpoint():
return """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Simple Flask Website</title>
</head>
<body>
<h1>Sample Flask Website</h1>
<h2>For testing purposes</h2>
<p>Here goes content </p>
</body>
</html>
"""
if __name__=="__main__":
app.run()
Ejemplo de una aplicación con diferentes endpoints que recibe datos
Para crear una aplicación con diferentes endpoints que reciba datos, vamos a hacer lo mismo que en la versión anterior y vamos a modificar la parte de los endpoints con comodines:
from flask import Flask
"""
Simple Flask app serving dynamic endpoints
"""
app = Flask(__name__)
@app.route("/")
def indexpoint():
return """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Simple Flask Website</title>
</head>
<body>
<h1>Sample Flask Website</h1>
<h2>For testing purposes</h2>
<p>Here goes content </p>
</body>
</html>
"""
@app.route("/<name>")
def namedpoint(name):
return """
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Simple Flask Website</title>
</head>
<body>
<h1>Sample Flask Website</h1>
<h2>For testing purposes</h2>
<p>Here goes content {} </p>
</body>
</html>
""".format(name)
if __name__=="__main__":
app.run()
Ejemplo de una aplicación web con comunicación a una base de datos
En este ejemplo vamos a crear una aplicación un poco mas complicada donde vamos a utilizar comunicación con una base de datos en PostgreSQL y vamos a estructurar esta aplicación de manera un poco diferente.
Vamos a crear nuestro ambiente virtual como en las veces anteriores y vamos a instalar las siguientes dependencias:
(venv)$ pip install Flask
(venv)$ pip install psycopg2
(venv)$ pip install Flask-SQLAlchemy
Para instalar psycopg2 se necesitan cubrir ciertos prerrequisitos
- pg_config
- el paquete python-dev
- el paquete libpq-dev
- un compilador C (del GCC)
Ahora vamos a separar las rutas de la funcionalidad y la configuración utilizando diferentes archivos vamos a inspirarnos en el Mega Tutorial de Flask de Miguel Greenberg:
venv
simplewebdb.py
app/
--__init__.py
--routes.py
Una vez que tenemos esta estructura vamos a llenarla.
Ejemplo de una aplicación web con base de datos y templates
Conclusiones
Crear apps con Flask es rápido, sencillo y nos deja ir creciendo nuestra app de manera orgánica como vayamos requiriendo. Existen muchas maneras de generar apps útiles con Flask y pasar de experimentos sencillos a producción.