Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y Más

Los frameworks de Python se pueden dividir en algunas áreas, ya que Python es un lenguaje muy diverso y se puede usar en varios campos. Cada uno de estos campos tiene sus propios marcos, algunos de los cuales son más populares que otros. Uno de los campos más populares en los que se aplica Python es el desarrollo web, en el que nos centraremos hoy.

Los frameworks presentados se pueden dividir en tres categorías: frameworks de pila completa, que ofrecen muchas características listas para usar para el lado del servidor y el cliente; microframes, que ofrecen soporte del lado del servidor (a veces, se pueden extender al lado del cliente) y permiten crear una aplicación web con solo usar un solo archivo Python; y, finalmente, frameworks asincrónicos, que manejan solicitudes de forma asincrónica.

Marcos web de pila completa

Django

Django es uno de los marcos de Python más populares. Ofrece muchas funcionalidades listas para usar, como Panel de administración o Vistas y Formularios genéricos. Las principales características de Django son:

  • un script de gestión («manage.py») que se puede usar para realizar la mayoría de las acciones específicas del marco (como iniciar el servidor de desarrollo, crear un usuario administrador, recopilar archivos estáticos, etc.),

  • procesamiento síncrono de solicitudes,

  • patrón de arquitectura MTV (modelo-plantilla-vista) (que es una variación del patrón modelo-vista-controlador),

  • mapeo relacional de objetos personalizado (custom) para comunicarse con la base de datos,

  • uso de funciones y clases para la creación de contextos de vista y el>

    Django es estricto y fuerza su propio estilo de codificación en el desarrollador-una gran cantidad de meta programación,

  • muy buena, extensa documentación con ejemplos,

  • renderización de plantillas HTML personalizadas motor,

  • sistema de enrutamiento de URL personalizado,

  • cumplimiento del estándar WSGI,

  • soporte para enrutamiento de URL de archivos estáticos, así como detección y recopilación,

  • un gran número de módulos externos, por ejemplo, Django REST Framework, Django CMS, Canales Django (websockets).

Django es una buena opción para proyectos más grandes, donde se requiere un amplio soporte de backend y frontend o en casos en los que el tiempo juega un papel crucial, ya que Django ofrece una gran cantidad de componentes listos. La codificación en Django se basa principalmente en la personalización de partes genéricas de código. El desarrollador debe seguir un conjunto de reglas que vienen con un elemento dado. Para proyectos en los que se desea mucha flexibilidad de código, Django podría no ser la mejor opción.

37.514 Github stars / 183.588 preguntas de StackOverflow
5 de septiembre-30-2020-01-29-47-33-PM

Web2py

Web2py se centra en la seguridad, la velocidad de desarrollo y la facilidad de uso. Ofrece muchas funciones listas para usar: un servidor web, una base de datos, un panel de administración, un wiki o widgets de cuadrícula. Las principales características del marco son:

  • procesamiento de solicitudes síncrono,

  • capa de abstracción de base de datos personalizada (DAL) que actúa como OR,

  • fuerza una estructura MVC,

  • se pueden usar funciones y clases para crear Controladores,

  • filosofía estricta de «Solo debe haber una forma de hacer las cosas»,

  • rica documentación con muchos ejemplos,

  • motor HTML personalizado que permite usar código Python en las plantillas,

  • función de URL de enrutamiento personalizado que genera rutas internas para las acciones y archivos estáticos,

  • soporte para el estándar WSGI, pero es posible usar CGI (Interfaz de puerta de enlace común), FastCGI, GAE (Motor de Google App) u otros,

  • ofrece enrutamiento de archivos estáticos y transmisión durante el desarrollo,

  • tiene servicios REST incorporados, pero requiere el marco Tornado para el uso de Sockets Web.

Web2py se inspiró mucho en los frameworks Ruby on Rails y Django y toma lo mejor de ambos.
Puede ser una buena opción para programadores que desean migrar desde Ruby o para aquellos que están aburridos con Django pero están buscando otro marco grande y rico en funciones. Ofrece una aplicación «admin», que actúa como un IDE basado en la web para el desarrollo y la gestión de aplicaciones (por ejemplo, creaciones de aplicaciones, editor de código). También es compatible con PyCharm.
En general, Web2Py no carece de ninguna funcionalidad que Django tenga. Estos dos marcos se pueden utilizar para cumplir las mismas tareas. Web2Py es más joven, y tiene una comunidad más pequeña que Django, por lo que podría ser un poco más difícil encontrar ayuda en caso de problemas.

1.665 GitHub stars / 2.004 preguntas de StackOverflow
Comparación de marcos de trabajo de 0Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y más

TurboGears

TurboGears conecta muchos servicios externos para crear un marco funcional:

  • procesamiento síncrono de solicitudes,

  • patrón de controlador de vista de modelo (MVC),

  • utiliza SQLAlchemy OR,

  • permite el uso de funciones y generación de contexto de vista de clase,

  • ofrece algunas clases genéricas listas para usar (muy interesante ApiController para API REST creación),

  • la documentación es un poco caótica, pero puede que sea cuestión de acostumbrarse,

  • utiliza el lenguaje de plantillas Kajiki,

  • métodos de enrutamiento/despacho de URL personalizados,

  • estándar,

  • admite configuraciones de ruta de archivos estáticos

  • se puede ampliar con módulos adicionales, por ejemplo, Circus y Chaussette para soporte de Sockets Web.

El framework no es tan popular como sus dos predecesores, pero vale la pena echarle un vistazo.

259 GitHub stars / 107 preguntas de StackOverflow
Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y Más

Microestructuras

Flask

Es una de las microestructuras de Python más populares, es confiable y rápida. Se dice que fue creado como una broma. Las principales características del marco son:

  • soporte de solicitud síncrona,

  • no fuerza ninguna arquitectura de proyecto, pero tiene algunas recomendaciones (paquete, módulo, planos),

  • no ofrece OR, pero se puede usar SQLAlchemy u otro,

  • soporta funciones, así como algunas vistas de clase genéricas similares a Django (a partir de Flask 0.7),

  • estilo de codificación suelto, no fuerza ninguna solución, la mayoría de las decisiones se dejan a discreción del desarrollador,

  • buena documentación con ejemplos,

  • es posible usar el motor de plantillas HTML Jinja2,

  • sistema de enrutamiento Werkzeug,

  • compatible con el estándar WSGI,

  • soporta enrutamiento de archivos estáticos básicos,

  • se puede ampliar con algunos módulos adicionales de terceros, por ejemplo, Flask-RESTful para la creación de API REST o flask-socketio para soporte de Sockets Web.

Este framework hará el truco en proyectos pequeños y medianos. Tiene algunos módulos de terceros que están listos para ser utilizados, así como buenas soluciones nativas.
Flask debería demostrar su valía en trabajos en los que se requieren funciones personalizadas complicadas, pero Django parece demasiado grande para la tarea. Por otro lado, configurar el frasco para un proyecto más grande desde el principio puede ser complicado, ya que no hay una forma «oficial» de hacerlo.

39.946 estrellas de Github / 24.512 preguntas de StackOverflow
Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y Más

Pyramid

Pyramid comienza con una instalación mínima que se puede extender cuando sea necesario. Vale la pena señalar que es parte del proyecto Pilones, que integra tecnologías relacionadas con la web. Estas son algunas de las características más importantes de la pirámide:

  • ofrece procesamiento de solicitudes sincrónico,

  • los contextos de vistas se pueden definir con funciones y clases,

  • no hay OR específico, pero se recomienda SQLAlchemy,

  • no fuerza ningún estilo de codificación o arquitectura de proyecto: TIMTOWTDI,

  • ofrece una buena documentación con tutoriales y ejemplos,

  • no se entrega un motor de plantillas HTML específico, pero se recomienda Chameleon,

  • un interesante sistema de enrutamiento personalizado permite que varias vistas coincidan con una URL,

  • es compatible con WSGI,

  • amplio soporte de archivos estáticos: el servicio de archivos – el enrutamiento de URL para archivos estáticos,

  • se puede ampliar con módulos externos, por ejemplo, Cornice para API REST, aiopiramid con soporte asincrónico.

Este framework puede ser una buena opción en los casos en los que no desee dedicar tiempo a aprender soluciones de frameworks personalizados (como OR), pero aún necesite una herramienta extensa para crear software, ya que Pyramid admite el uso de muchas soluciones independientes conocidas.
Tiene buenas capacidades de escalado: se anuncia como un marco que puede «comenzar pequeño y terminar en grande».

2.974 preguntas de GitHub / 2.060 preguntas de StackOverflow
Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y Más

CherryPy

Permite la creación de aplicaciones web de la misma manera que el proyecto Python orientado a objetos. No tiene funcionalidades de pila completa y no obliga a ninguna solución específica: el desarrollador puede decidir cómo resolver los problemas que ocurren durante el desarrollo. Las características de CherryPy son:

  • ofrece soporte de solicitud síncrono,

  • no fuerza ninguna estructura o arquitectura de proyecto,

  • no entrega ningún OR, pero se pueden usar SQLAlchemy o SQLObject,

  • no entrega ningún motor de plantillas HTML,

  • tiene un estilo de codificación suelto,

  • ofrece una documentación decente,

  • se pueden usar las rutas del sistema de enrutamiento (versión Python del sistema de enrutamiento Rails),

  • es compatible con WSGI,

  • tiene un buen soporte para archivos estáticos, permite servir archivos o archivos completos directorios,

  • permite la creación de API REST solo con herramientas integradas,

  • facilita el uso de Sockets Web a través del módulo ws4py.

La principal ventaja de CherryPy es que viene con un servidor WSGI listo para producción, que elimina la necesidad de configurar un servidor externo durante la implementación. El principal inconveniente de este framework es que no es muy popular, por lo que tiene un menor número de módulos externos y una comunidad menos vibrante.

829 GitHub stars / 1.244 preguntas de StackOverflow
Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y Más

BottlePy

Es otro microframe que se anuncia rápido y simple. Vale la pena señalar que BottlePy se entrega como un solo módulo sin dependencias adicionales. Función:

  • implementa el manejo de solicitudes síncrono,

  • ofrece un motor HTML personalizado, pero se pueden usar otros motores como Mako, Jinja2 o Cheetah,

  • no ofrece OR, pero es posible usar soluciones externas, p. ej. SQLAlchemy o Macaron,

  • no fuerza ninguna arquitectura de proyecto,

  • ofrece suficiente documentación,

  • tiene un sistema de enrutamiento personalizado, pero se puede usar un sistema de enrutamiento Werkzeug (a través de bottle-werkzeug),

  • implementa el estándar WSGI,

  • ofrece un archivo estático básico enrutamiento,

  • ofrece greenlets (con gevent) como solución de manejo de solicitudes asincrónicas,

  • es posible crear API REST sin módulos externos: admite datos de cliente JSON.

Debido a su pequeño tamaño (solo un archivo) y no requiere dependencias externas (solo biblioteca estándar de Python), puede ser una buena opción para principiantes que quieran comenzar a aprender desarrollo web. También puede hacer un buen trabajo con sitios muy pequeños o pruebas desechables. BottlePy no será la mejor opción para proyectos de tamaño mediano o grande, ya que requeriría algo de trabajo para llegar al punto en que comiencen los marcos más pesados.

5.795 GitHub stars/1.288 preguntas de StackOverflow

Frameworks asíncronos

Aiohttp

Es un extenso framework de Python asíncrono. Ofrece un servidor con middleware, señales, paradas elegantes y mucho más:

  • manejo de solicitudes asíncronas, websockets de cliente y servidor,

  • es posible usar GINO async as,

  • admite vistas basadas en funciones y clases,

  • documentación suficiente pero un poco difícil de navegar,

  • es posible usar SQLAlchemy puro pero GINO como se recomienda un contenedor asíncrono,

  • soporta controladores asíncronos Postgres, MySQL, Redis,

  • sin motor de plantillas listo para usar, pero se pueden aplicar Jinja2 o Mako,

  • sistema de enrutamiento personalizado,

  • sin soporte WSGI,

  • admite enrutamiento para archivos estáticos,

  • muchos módulos de terceros que pueden ampliar aún más el marco, por ejemplo, aiohttp-apispec para la creación de API REST, aiohttp-security para autenticaciones y permisos de usuarios.

Ya que ofrece muchas funciones listas para usar (por ejemplo, soporte para los lados cliente y servidor, websockets, middleware, señales), Aiohttp se puede usar con proyectos de tamaño mediano (o incluso con proyectos más grandes).

6,378 Github stars / 503 Preguntas de StackOverflow
Comparación de Frameworks de Python: Django, Pyramid, Flask, Sanic, Tornado, BottlePy y más

Sanic

Sanic es un framework muy parecido a un frasco: es pequeño, liberal y deja mucho espacio para el desarrollador. Su característica principal es su velocidad.
Aquí hay algunas otras características:

  • soporte para el manejador de solicitudes asíncronas,

  • no ofrece ninguna interfaz de base de datos, pero se puede instalar GINO async OR,

  • ofrece función y clase como fuente del contexto de vista,

  • el estilo de codificación es bastante suelto, muy similar a Flask,

  • documentación entregada con «readthedocs»,

  • Se puede utilizar el motor de plantillas HTML Jinja2,

  • sistema de enrutamiento personalizado,

  • no es compatible con WSGI de forma predeterminada, pero se puede instalar un módulo de terceros (sanic-dispatcher) para soportarlo,

  • enrutamiento de archivos estáticos,

  • se puede ampliar con módulos adicionales, por ejemplo, Sanic CRUD para la creación de API REST.

Debería ser una buena decisión elegir Sanic cuando ya tengas algo de experiencia con Flask, ya que estos dos frameworks tienen mucho en común.
Sanic ofrece el manejo de la configuración predeterminada, mientras que en aiohttp mencionado anteriormente, el usuario debe hacerlo por su cuenta. Tiene algunos módulos de terceros interesantes, como un limitador de velocidad de solicitud o una integración de GraphQL.

10.625 Github stars / 58 preguntas de StackOverflow

Tornado

Tornado es un framework web Python y biblioteca de redes asíncronas, desarrollado originalmente en FriendFeed (un sitio de agregación social). Gracias a eso, ofrece una integración integrada con servicios sociales como Google, Facebook y Twitter.
La integración con otros frameworks y bibliotecas también es posible: aplicaciones Twisted, asyncio o incluso WSGI. Características de Tornado:

  • ofrece muchas clases genéricas que se pueden usar para crear la aplicación, p. ej.

  • motor de plantillas HTML personalizado,

  • documentación clara y fácil de leer,

  • se pueden usar funciones y clases para definir acciones y manejar solicitudes,

  • manejo de enrutamiento personalizado: ofrece clases genéricas que se pueden usar para crear rutas,

  • oporta WSGI, pero no se recomienda-el usuario debe usar las interfaces propias de Tornado en su lugar,
  • soporte websockets listo para usar, autenticación (p. ej. a través de Google), y funciones de seguridad (como firma de cookies o protección XSRF),

  • no se necesitan herramientas adicionales para la creación de API REST.

El framework debería funcionar bien en los casos en que haya muchas conexiones entrantes que se puedan manejar rápidamente o en soluciones en tiempo real, por ejemplo, chats. Tornado intenta resolver el problema del c10k, por lo que la alta velocidad de procesamiento es una prioridad. Otra ventaja de Tornado es su soporte nativo para servicios sociales. Este marco no será una buena opción para crear sitios CRUD estándar o aplicaciones de grandes empresas, ya que no fue diseñado para ser utilizado de esa manera. Para proyectos más grandes, se puede integrar con aplicaciones WSGI como parte de su estructura más grande y encargarse de tareas que requieren altas velocidades de manejo.

16.768 Github stars / 3.263 preguntas de StackOverflow

Resumen

Los frameworks web presentados anteriormente son simplemente una pequeña parte de una familia más grande y amplia de frameworks Python.
Cada solución tiene sus puntos fuertes y débiles y, como con todo lo demás, no hay una combinación perfecta que resuelva cada tarea dada.
Las preguntas más importantes que uno tiene que responder al elegir el marco están dictadas por problemas que deben resolverse.

  • Si se requiere un amplio soporte en el lado del servidor y del navegador, entonces un marco de pila completa podría ser una buena opción.
  • Para proyectos más pequeños o donde la flexibilidad en la escritura de código es una prioridad, un micro marco puede ser el camino a seguir.
  • En los casos en los que la velocidad de procesamiento de solicitudes juega un papel importante o un proyecto tendrá que lidiar con largos tiempos de respuesta, el marco asíncrono debería hacer el truco.

Deja una respuesta

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