Análisis de libro – Flask Web Development – O’Reilly

flask web development miguel grinberg oreilly

Autor: Miguel Grinberg

Título: Flask Web Development – Second edition

Editorial: O’Reilly

Año: 2018

nº páginas: 250

Tiempo estimado de lectura: 40 días

Análisis Resumen del libro Flask Web Development

Este libro pretende mostrar cómo es el desarrollo de aplicaciones web utilizando uno de los framework web más utilizados en Python, Flask.

Flask es un microframework que su principal virtud es que se puede componer de diferentes extensiones para completar cualquier funcionalidad requerida, pero no da por sentado que ninguna funcionalidad deba de estar incluida por defecto.

Este libro es considerado uno de los mejores libros para aprender de forma práctica todos los aspectos del framework y que sirva como un primer contacto en profundidad.

Estructura del libro

El libro está dividido en tres partes fundamentales:

  • Explicación de primeros pasos: se explica en general el framework, como instalarlo y cómo descargar el código de la aplicación que se estudiará más adelante.
  • Demostración en detalle de la aplicación de ejemplo: se centra en explicar en detalle las partes de una aplicación tipo blog con componentes esenciales.
  • Exposición de elementos útiles para el desarrollo de aplicaciones Flask: se explican conceptos que se utilizan comúnmente como pueden ser los tests, la cobertura de código o el despliegue de diferentes formas.

Pepitas de conocimiento de Flask Web Development

A continuación, se muestran algunas pinceladas del contenido que se puede extraer del libro y que resultan sumamente interesantes.

Estructura de aplicaciones Flask

Se comienza explicando cómo instalar Flask y más adelante se explica cómo configurar los diferentes entornos de la aplicación (dev, staging y producción) y los conceptos de blueprints para conectar diferentes aplicaciones.

Adicionalmente se explica una estructura de ficheros base para cualquier aplicación Flask que es la siguiente:

|-flaskapp
  |-app/
    |-templates/
    |-static/
    |-main/
      |-__init__.py
      |-errors.py
      |-forms.py
      |-views.py
    |-__init__.py
    |-email.py
    |-models.py
  |-migrations/
  |-tests/
    |-__init__.py
    |-test*.py
  |-venv/
  |-requirements.txt
  |-config.py
  |-flaskapp.py

Gestión de usuarios en Flask

Se explica la gestión de usuarios de diferentes formas:

  • Usuarios: creación de usuarios con nombre de usuario, email, nombres, permisos (por roles).
  • Permisos: se crean los permisos utilizando una máscara de bits para manejar permisos de forma simple.
  • Roles: gestión de permisos asignados a roles, que a su vez se asignan a usuarios.
class Permission:
    FOLLOW = 1
    COMMENT = 2
    WRITE = 4
    MODERATE = 8
    ADMIN = 16

......... Checking permissions .........
    def add_permission(self, perm):
        if not self.has_permission(perm):
            self.permissions += perm

    def remove_permission(self, perm):
        if self.has_permission(perm):
            self.permissions -= perm

    def reset_permissions(self):
        self.permissions = 0

    def has_permission(self, perm):
        return self.permissions & perm == perm

Explicando las siguientes extensiones de flask:

  • Flask-Login: para el manejo de usuarios logueados.
  • Werkzeug: creación y verificación de contraseñas.
  • itsdangerous: cifrado de tokens de seguridad y verificación.
  • Flask-Mail: envío de emails de autenticación y confirmación de emails de usuarios.
class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    default = db.Column(db.Boolean, default=False, index=True)
    permissions = db.Column(db.Integer)
    users = db.relationship('User', backref='role', lazy='dynamic')

Ciclo response-request en Flask

Se explica el ciclo utilizado en web response-request:

  • Enrutado y creación de endpoints.
  • Gestión de errores y métodos aceptados.
  • Contextos de cada petición.
  • Variables de contexto como request, g, current_app o current_user.
  • Respuestas via html o JSON.

Renderizado de templates y formularios

Explicación de manejo de HTML y formularios:

  • Renderizado con Jinja2.
  • Extensión de plantillas, filtros y macros.
  • Presentación de datos en plantillas.
  • Manejo de formularios utilizando Flask-WTF (What the forms).
  • Gestión visual de Flask-bootstrap unido con Flask-WTF.

Bases de datos y SQLAlchemy en Flask

Gestión de datos en bases de datos:

  • Uso de Flask-SQLAlchemy para unir un ORM con Flask.
  • Migraciones en aplicaciones Flask.
  • Gestión de datos con shell para usar datos e introducción de datos estáticos.
  • Creación de datos con faker para testear.
  • Tests con diferentes bases de datos sqlite, en memoria o propias como MySQL.
from random import randint
from sqlalchemy.exc import IntegrityError
from faker import Faker
from . import db
from .models import User, Post


def users(count=100):
    fake = Faker()
    i = 0
    while i < count:
        u = User(email=fake.email(),
                 username=fake.user_name(),
                 password='password',
                 confirmed=True,
                 name=fake.name(),
                 location=fake.city(),
                 about_me=fake.text(),
                 member_since=fake.past_date())
        db.session.add(u)
        try:
            db.session.commit()
            i += 1
        except IntegrityError:
            db.session.rollback()

Aplicación de ejemplo y extensiones

Durante todo el libro se explica cómo crear una aplicación social tipo blog con:

  • Gestión de usuarios.
  • Post de cada usuario con soporte de markdown.
  • Respuestas de cada usuario.
  • Moderación de comentarios.
  • Sistema de seguimiento de usuarios para filtrar contenido.

Además se añade contenido extra como coverage del código, profiler de aplicación, testeo de la aplicación y despliegue de la misma.

Gestión de APIs web con Flask

Se explica de forma simple cómo crear una API que devuelva información en JSON. Se introducen conceptos de versionado y buenas prácticas.

Desplegando una aplicación web

En la parte final del libro, se explica cómo se hacen los despliegues de aplicaciones Flask en diferentes plataformas:

  • Heroku: plataforma para realizar despliegues de forma simple.
  • Docker: se explica de forma muy reducida cómo dockerizar una aplicación y lanzarla, con o sin base de datos externa.
  • Despliegue tradicional: utilizando gunicorn (o waitress en windows) y nginx o apache para realizar el despliegue en una máquina dedicada.
class HerokuConfig(ProductionConfig):
    SSL_REDIRECT = True if os.environ.get('DYNO') else False

    @classmethod
    def init_app(cls, app):
        ProductionConfig.init_app(app)

        # handle reverse proxy server headers
        from werkzeug.contrib.fixers import ProxyFix
        app.wsgi_app = ProxyFix(app.wsgi_app)

        # log to stderr
        import logging
        from logging import StreamHandler
        file_handler = StreamHandler()
        file_handler.setLevel(logging.INFO)
        app.logger.addHandler(file_handler)

Libros de Miguel Grinberg

Libros recomendados para aprender Python

Estos son los libros que pueden ayudarte a aprender Python, aprender a programar, tipos de datos, algoritmia y mucho más.

Disponible en:

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Ver más

  • Responsable: Oscar Ramirez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento: No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a ionos (1&1) que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Publicar un comentario