5 grandes y poderosos frameworks web de Python

Cuando crea un back-end para un sitio web o servicio, incluso uno que parece modesto a primera vista, puede descubrir rápidamente que es todo lo contrario. Incluso un sitio "simple" resulta ser un hervidero de complejidad. La administración de usuarios, el diseño de datos, el envío de formularios, la seguridad, implementar todo eso a mano se vuelve tedioso.

Para esos grandes proyectos web, cuando sepa que necesitará todo más el fregadero de la cocina, es mejor recurrir a un marco que viene con baterías (y cargadores) incluidos. Aquí hay cinco marcos web de peso pesado para Python que vienen con todo lo que necesita para crear aplicaciones web sólidas y más.

CubicWeb

CubicWeb se anuncia como "un marco de aplicación web semántica que favorece la reutilización y el diseño orientado a objetos". Es un sistema intrigante, como señaló Rick Grehan cuando lo revisó en 2011, que enfatiza el uso de abstracciones y bloques de construcción reutilizables de código llamados "cubos". De hecho, CubicWeb podría ser demasiado abstracto o idiosincrásico para algunos desarrolladores, y su velocidad de desarrollo y su conjunto de características van a la zaga de otros marcos.

Los cubos son componentes de software que presentan un esquema (modelo de datos), entidades (lógica de programación) y vistas. Al ensamblar varios cubos, cada uno realizando su propia tarea, puede componer aplicaciones de software reutilizando su propio código y el código de otros.

En esencia, CubicWeb proporciona el andamiaje básico utilizado por cada aplicación web: un "repositorio" para las conexiones y el almacenamiento de datos; un “motor web” para solicitudes / respuestas HTTP básicas y acciones CRUD; y un esquema para modelar datos. Todo esto se describe en las definiciones de clases de Python.

Para configurar y administrar instancias de CubicWeb, trabaja con una herramienta de línea de comandos similar a la que se usa para Django. Un sistema de plantillas integrado le permite generar resultados HTML mediante programación. También puede utilizar un cubo que proporcione herramientas para las IU web, como el marco HTML de Bootstrap.

Aunque CubicWeb es compatible con Python 3 (desde la versión 3.23), no parece utilizar la funcionalidad asíncrona nativa de Python 3. Una forma indirecta de incluir async sería usar el módulo cubicweb.pyramid para usar el marco Pyramid como servidor web, y dibujar en una bifurcación de Pyramid que usa construcciones async. También es posible realizar tareas de forma asincrónica con el cubo cubicweb-worker. Pero cualquier cosa más sencilla parece fuera de su alcance por ahora.

Para obtener o manipular datos persistentes en una aplicación CubicWeb, usa Relation Query Language (RQL), que emplea una sintaxis vagamente similar a SQL pero que sigue el patrón de SparQL del W3C. La justificación de CubicWeb para esto es, nuevamente, la abstracción: RQL proporciona una ruta altamente desacoplada para interrelacionar varias fuentes de datos.

Debido a que CubicWeb tiene muchas dependencias, es mejor usarlo pip installpara recuperarlas todas. También es posible que deba realizar una cierta cantidad de ajustes manuales en el entorno local. Esto contrasta con otros marcos donde pip installtodo lo que se requiere es ejecutar o colocar el código del marco en una subcarpeta de otro proyecto. O puede usar un contenedor Docker para que todo funcione.

CubicWeb se refiere a su extensa documentación como "el libro". Los autores del libro se han tomado el tiempo de explicar el enfoque inusual de CubicWeb, demostrar cómo crear algunas aplicaciones básicas, incluir referencias de API y, en general, se esfuerzan por ser específicos.

CubicWeb permanece en desarrollo activo, aunque lento. Los planes para CubicWeb 4.0 se han reflexionado desde 2012, pero aún no se ha ofrecido un cronograma para entregarlo.

Django

En la década y el cambio desde que apareció Django por primera vez, se ha convertido en uno de los frameworks más implementados de Python para crear aplicaciones web. Django viene con casi todas las baterías que pueda necesitar, lo que lo hace más adecuado para crear aplicaciones grandes que pequeñas.

Django pasó muchos años sentado en la versión 1.x. Cuando Django 2.0 llegó a fines de 2017, dejó de ser compatible con Python 2 en favor de Python 3.4 y versiones posteriores. Django 3.0, lanzado en diciembre de 2019, requiere Python 3.6 o superior y agrega soporte para el nuevo estándar ASGI asíncrono para aplicaciones web Python.

Una parte clave del atractivo de Django es la velocidad de implementación. Debido a que Django incluye tantas piezas que necesita para desarrollar la aplicación web promedio, puede comenzar a moverse rápidamente. El enrutamiento, el análisis de URL, la conectividad de la base de datos, incluido un ORM (mapeador relacional de objetos), la validación de formularios, las protecciones contra ataques y la creación de plantillas están integrados.

Encontrará bloques de construcción para los escenarios de aplicaciones web más comunes. La gestión de usuarios, por ejemplo, se encuentra en la mayoría de los sitios web, por lo que Django la ofrece como elemento estándar. En lugar de tener que crear su propio sistema para rastrear cuentas de usuario, sesiones, contraseñas, inicios / cierres de sesión, permisos de administrador, etc., Django proporciona esas características de forma nativa. Pueden usarse tal cual o ampliarse para abarcar nuevos casos de uso con un trabajo mínimo.

Django tiene valores predeterminados sensatos y seguros que ayudan a proteger su aplicación web de ataques. Cuando coloca una variable en una plantilla de página, como una cadena con HTML o JavaScript, el contenido no se representa literalmente a menos que designe explícitamente la instancia de la variable como segura. Esto por sí solo elimina muchos problemas comunes de secuencias de comandos entre sitios. Si desea realizar la validación de formularios, puede utilizar de todo, desde una simple protección CSRF hasta mecanismos completos de validación campo por campo que devuelven comentarios de error detallados.

Un conjunto de características tan rico y amplio como el de Django no sería muy bueno sin una sólida documentación que lo acompañe. La documentación de Django profundiza en todos los aspectos del marco desde múltiples ángulos. Trabajar con Python 3 u otras variantes del lenguaje, hacer las cosas bien en materia de seguridad, implementar componentes de aplicaciones web comunes (como sesiones o paginación), generar mapas del sitio, todo está cubierto. Las API para cada capa de la aplicación (modelo, vista y plantilla) también se describen en detalle.

Sin embargo, un gran poder conlleva una gran complejidad. Las aplicaciones de Django tienen la reputación de ser muy pesadas y están repletas de muchas partes móviles. Incluso una aplicación simple de Django requiere una buena cantidad de configuración para ejecutarse. Si su objetivo es hacer poco más que configurar un par de puntos finales REST simples, es casi seguro que Django sea excesivo.

Django también tiene sus peculiaridades. Por ejemplo, las plantillas de página no pueden utilizar llamadas. Ejemplo: puede pasar {{user.name}}como componente en una plantilla, pero no {{user.get_name()}}. Es una de las formas en que Django se asegura de que las plantillas no le disparen inadvertidamente en el pie, pero esas limitaciones pueden ser discordantes si no está preparado para ellas. Si bien existen soluciones alternativas, tienden a afectar el rendimiento.

A partir de la versión 3.0, Django ha agregado soporte para vistas asincrónicas. Desafortunadamente, todavía no hay soporte para async en otras partes de la pila de Django, como el ORM. Pero puede implementar Django usando ASGI para aprovechar al máximo las vistas asíncronas.

Web2py

En el mundo de la programación Ruby, Ruby on Rails es el marco web de facto. El profesor de ciencias de la computación de la Universidad DePaul, Massimo Di Pierro, se inspiró en Rails para crear un marco web en Python que era igualmente fácil de configurar y usar. El resultado es Web2py.

La mayor atracción de Web2py es su entorno de desarrollo integrado. Cuando configura una instancia de Web2py, se le proporciona una interfaz web, esencialmente un editor de aplicaciones Python en línea, donde puede configurar los componentes de la aplicación. Normalmente, esto significa crear modelos, vistas y controladores, cada uno de los cuales se describe mediante módulos de Python o plantillas HTML. Algunas aplicaciones de ejemplo vienen con Web2py listas para usar. Puede separarlos para ver cómo funcionan o aprovecharlos como plantillas de inicio para crear sus propias aplicaciones.

Los desarrolladores suelen implementar Web2py descargando su código fuente y basándose en él. Pero para los usuarios menos técnicos de Windows o MacOS, los creadores de Web2py ofrecen versiones que son esencialmente servidores independientes. Descargue, descomprima y ejecute una de estas versiones y tendrá un servidor web local con una copia preconfigurada de Web2py incorporada. Esta es una buena manera de obtener una ventaja en la creación de una aplicación Web2py, que luego se puede implementar en otro lugar según sea necesario.

La interfaz web de Web2py se creó con Bootstrap 4, por lo que es agradable a la vista y fácil de navegar. El editor en el navegador no sustituye a un IDE completo, pero está equipado con ayudas útiles como numeración de líneas y resaltado de sintaxis de Python (incluida la sangría automática). También se incluye una interfaz web rápida para el shell de Python, para que pueda interactuar con Web2py desde la línea de comandos, una buena concesión para los expertos.

El sistema de abstracción de datos utilizado en Web2py funciona de forma un poco diferente al ORM de Django y otros ORM inspirados en él (como Peewee). Esos sistemas usan clases de Python para definir modelos, mientras que Web2py usa funciones de constructor como define_tableinstanciar modelos. Es probable que las diferencias sean discordantes solo si está acostumbrado a lo contrario; no deberían desconcertar a los recién llegados. No es probable que tenga problemas para conectar Web2py con un proveedor de datos, ya que se comunica con casi todas las bases de datos importantes que existen.

Una función relacionada con la base de datos realmente útil en Web2py es la capacidad de generar un diagrama de los modelos, lo que le permite visualizar cómo se relacionan sus modelos entre sí. Sin embargo, necesitará instalar la biblioteca PyGraphviz para habilitar esa función.

Web2py proporciona muchos otros componentes de nivel profesional: funciones de internacionalización, múltiples métodos de almacenamiento en caché, control de acceso y autorización, e incluso efectos de front-end (por ejemplo, un selector de fechas en formularios) a través del soporte integrado para jQuery y AJAX. También se incluyen enlaces para middleware externo e interno, aunque no está permitido utilizar middleware para reemplazar las funciones principales de Web2py. Sin embargo, todavía no hay un uso explícito de la funcionalidad asíncrona de Python en Web2py, aunque hay un programador para manejar tareas de larga duración. 

No es de extrañar que se haga referencia a la documentación de Web2py como "el libro". Primero, cubre una cantidad asombrosa de material en Web2py, Python y los entornos de implementación utilizados para ambos. En segundo lugar, está escrito en un estilo narrativo muy accesible. En tercer lugar, habla en profundidad sobre escenarios comunes de creación de aplicaciones. Hay un capítulo completo, por ejemplo, sobre el uso de jQuery para crear aplicaciones AJAX.

Weppy

Weppy se siente como una marca a medio camino entre la simplicidad mínima de Flask y la integridad de Django. Si bien el desarrollo de una aplicación Weppy tiene la sencillez de Flash, Weppy viene con muchas características que se encuentran en Django, como capas de datos y autenticación. Por lo tanto, Weppy es adecuado para aplicaciones que van desde extremadamente simples hasta modestamente sofisticadas.

A primera vista, el código Weppy se parece mucho al código Flask o al código Bottle. Se necesitan pocas instrucciones para poner en funcionamiento un sitio web básico de ruta única. Las rutas se pueden describir mediante decoradores de funciones (la forma más fácil) o mediante programación, y la sintaxis para hacerlo se ajusta a Flask / Bottle. La creación de plantillas funciona de la misma manera, aparte de pequeñas variaciones en la sintaxis.

Weppy contrasta con esos marcos más pequeños al incluir algunas características que incorporan solo como complementos o complementos. Por ejemplo, ni Flask ni Bottle tienen un ORM integrado o un sistema de gestión de datos. Weppy incluye un ORM, aunque uno basado en el proyecto pyDAL en lugar del mucho más popular SQLAlchemy. Weppy incluso admite migraciones de esquemas, que Django admite como parte de su ORM (el sistema de migración de Django también es mucho más automatizado). Si bien Weppy tiene un mecanismo de extensión, la lista de complementos aprobados oficialmente es pequeña, mucho más pequeña que el catálogo de extensiones de Flask.

Los marcos más livianos como Weppy se usan a menudo para construir API RESTful, y Weppy viene equipado con funciones convenientes para ese propósito. Coloque un @servicedecorador en una ruta y los datos que devuelva se formatean automáticamente en su elección de JSON o XML.

Weppy incluye otras características que parecen más acordes con un marco más amplio, pero se implementan sin volumen. Los ejemplos incluyen mecanismos de validación de datos, manejo de formularios, almacenamiento en caché de respuestas y validación de usuarios. En todos estos casos, Weppy adopta un enfoque de "lo suficiente". Las funciones proporcionadas no son tan completas como las que podría encontrar en Django y otros marcos de trabajo pesados, pero un desarrollador no necesita invertir mucho trabajo para que sean útiles y siempre se pueden extender después del hecho.

Otra característica del marco de peso pesado que se encuentra en Weppy es el soporte de internacionalización. Las cadenas de las plantillas se pueden traducir de acuerdo con los archivos de configuración regional proporcionados con la aplicación, que son diccionarios Python simples. La elección del idioma también se puede establecer analizando la solicitud del navegador (es decir, el encabezado HTTP Accept-Language) o vinculando una traducción a una ruta específica.

La documentación de Weppy tiene el mismo sabor que el marco en sí. Es limpio, legible y escrito para ser consumido por humanos. Aparte del ejemplo habitual de "hola mundo", incluye un agradable tutorial paso a paso que te permite crear un sistema de microblogging como proyecto inicial.

Los planes a largo plazo para Weppy incluyen el soporte de async y sockets como entidades de primera clase de bajo nivel. Los desarrolladores de Weppy planean introducir esas características en la versión 2.0 y luego requerir Python 3.7 o mejor para todas las versiones futuras de Weppy.

Zope