Python es tanto un juguete divertido como un aterrador lanzallamas. Lo mismo ocurre con lo que se puede hacer con Python.
Python es amado por aficionados, científicos y arquitectos por igual.
Es condenadamente fácil empezar a usarlo, tiene abstracciones de orden superior y capacidades de metaprogramación para construir sistemas grandes y complejos, y tiene camiones llenos de bibliotecas para hacer prácticamente cualquier cosa. Claro, hay limitaciones cuando se trata de concurrencia y tipado fuerte, pero se puede trabajar alrededor de ellos.
En este artículo, vamos a echar un vistazo a algunos de los mejores marcos de Python cuando se trata de construir aplicaciones web grandes y pequeñas.
Django
El marco Django ha resistido la prueba del tiempo el go-to web framework para la comunidad Python. Si usted asaltara a un desarrollador Python mientras duerme y le obligara a construir una aplicación web a punta de pistola, automáticamente echaría mano de Django de la misma forma que un rubyista echaría mano de Rails.
Y hay una buena razón para ello. Django es, como dice el eslogan, «un framework web para perfeccionistas con plazos» Es lo que se llama un framework «con pilas incluidas» (muy parecido a cómo Python es un lenguaje con pilas incluidas), que proporciona toda la funcionalidad común fuera de la caja.
Con estas características incorporadas, Django reduce enormemente el tiempo de desarrollo:
- Un ORM práctico y agradable, con migraciones creadas y aplicadas automáticamente por el framework.
- Andamiaje para la generación automática del panel de administración basado en sus modelos.
- Soporte para cookies, sesiones, middleware, plantillas, etc.
- Características de seguridad como prevención XSS, prevención CRSF, etc., se aplican automáticamente.
- Funciona con prácticamente todas las bases de datos existentes (es fácil encontrar adaptadores donde no existe soporte oficial)
- Soporte de primera clase para datos geográficos y consultas espaciales a través de GeoDjango
Y mucho, mucho más. Basta con decir que Django es un framework web completo y amigable.
¿Es Django para usted?
Absolutamente sí.
Django tiene un sentido excelente para todos los casos de uso, ya sea la creación rápida de prototipos o la planificación de una aplicación empresarial. La única aspereza que encontrará es la estructura del framework.
Dado que Django hace todo lo posible para que el desarrollo sea rápido y fácil para usted, impone su estructura (un concepto llamado «convención sobre configuración») al desarrollador, con la que puede no estar de acuerdo.
Por ejemplo, si quiere sustituir el ORM de Django por otra cosa (digamos, SQL Alchemy), prepárese para sorpresas.
¿Está interesado en convertirse en desarrollador full-stack con Django y Python? – Eche un vistazo a este fantástico curso en línea.
Flask
Aunque Django acapara casi toda la atención en el desarrollo web con Python, Flask es un fuerte contendiente.
A diferencia de Django, Flask es un «micro-framework», lo que significa que se centra en hacer unas pocas cosas mínimas bien y le deja el resto a usted. Este «el resto depende de usted» puede ser una fuente de frustración o deleite, dependiendo de cuáles sean sus objetivos.
Para los que saben lo que hacen y quieren elaborar con cariño sus aplicaciones web eligiendo los componentes de su elección, Flask es un regalo del cielo.
Flask ofrece las siguientes características:
- Enrutamiento, plantillas, gestión de sesiones y otras características útiles.
- Soporte completo para pruebas unitarias
- Una arquitectura mínima y conectable
- Soporte REST de primera clase
- Soporte para Blueprints, la visión única de Flask de la arquitectura para aplicaciones web diminutas
- Elija sus paquetes para ORM, migraciones, etc.
- Estructura de aplicación flexible: coloque sus archivos donde tengan más sentido para usted
- Servicio de archivos estáticos
- Compatible con WGSI
¿Es Flask para usted?
Como ya se ha dicho, Flask es un framework web mínimo, con todo dividido en componentes individuales que puede intercambiar. Si tiene prisa por construir un prototipo, pasará mucho tiempo tomando decisiones triviales sobre la base de datos, la estructura de carpetas, el enrutamiento, etc., que pueden resultar contraproducentes. Flask funciona mejor cuando usted está en un proyecto estable y serio de mediana a gran escala, especialmente las API REST.
Botella
Si pensó que el enfoque de Flask no era lo suficientemente mínimo y que aún le gustaría tener más control, salude a Bottle.
Bottle se despoja aún más, hasta el punto de que la única dependencia es la biblioteca estándar de Python. Esto significa que nada de pip install esto o pip install aquello, aunque lo más probable es que lo necesite en poco tiempo. He aquí por qué Bottle destaca para algunas personas:
- Despliegue en un solo archivo. Sí, toda su aplicación vive en un único archivo «.py».
- Sin dependencias externas. Si tiene instalada la versión correcta de Python, está listo.
- Suministra su motor de plantillas, que puede cambiarse por Jinja2, Mako o Cheetah.
- Soporte para formularios, cabeceras, cookies y carga de archivos.
- Servidor web incorporado, que puede sustituirse fácilmente.
¿Es Bottle para usted?
Si está haciendo una aplicación realmente pequeña (digamos, menos de 500 líneas de código) sin requisitos especiales, Bottle podría tener mucho sentido para usted. Es un enfoque completo y sin tonterías para crear aplicaciones web, pero en la práctica, encontrará que Bottle le entorpece más que le ayuda.
La razón es que el mundo real está siempre cambiando y, antes de que se dé cuenta. Nuevos requisitos caerán sobre su cabeza. En ese momento, ponerlo todo en un único archivo se convertirá en una tarea pesada.
Además, si piensa que Bottle y Flask son casi iguales, está en lo cierto. Las propuestas de fusionar ambas se remontan a 2012, e incluso Armin, el creador de Flask, está de acuerdo con ello. Sin embargo, Marcel, el creador de Bottle, mantiene una estricta distinción ideológica debido al enfoque de archivo único e insiste en que ambos permanezcan separados.
Zope
Zope es complicado de explicar, pero lo intentaré. Sí, es un framework web que puede utilizarse para construir aplicaciones grandes o pequeñas, pero eso no es todo. Zope es más bien una plataforma que consiste en herramientas (marcos web incluidos) creadas bajo la filosofía Zope y mantenidas por la Corporación Zope.
Zope tiene varios componentes y características interesantes adecuados para el desarrollo de aplicaciones empresariales:
- Una arquitectura de registro y descubrimiento de componentes para configurar una gran aplicación.
- ZODB — (la única) base de datos de objetos para Python para almacenar objetos de forma nativa.
- Un marco de trabajo completo y estándares para sistemas de gestión de contenidos
- Un conjunto de marcos de aplicaciones web — el canónico sigue llamándose Zope, aunque varios marcos nuevos (como Grok) se han construido sobre él.
- Sólidos estándares para el desarrollo, la publicación y el mantenimiento del software.
¿Es Zope para usted?
Si lo que busca es un entorno altamente estructurado para construir aplicaciones realmente grandes, Zope es bueno. Dicho esto, también se encontrará con su parte justa de problemas. Aunque Zope sigue evolucionando, la comunidad es realmente pequeña, hasta el punto de que muchos desarrolladores de Python ni siquiera han oído hablar de él.
Encontrar tutoriales y documentación extensa es difícil, así que prepárese para indagar mucho (¡aunque la comunidad es realmente útil!). Además, es posible que los desarrolladores de Python con los que se cruce no quieran aprender Zope y «diluir» su conjunto de habilidades.
TurboGears
TurboGears es un marco altamente flexible que tiene una arquitectura genuinamente componible. Es un marco que escala según sus necesidades, y puede utilizarlo para construir una aplicación de un solo archivo o un behemoth multi-tenancy.
TurboGears tiene algunas características elegantes, algunas de las cuales no están presentes en los marcos populares (como Django) o son difíciles de construir:
- Soporte de primera clase para múltiples bases de datos
- Transacciones multi-base de datos
- Altamente modular — comience con un solo archivo y escale tanto como necesite
- Un potente ORM (SQLAlchemy, que es más maduro y capaz que el ORM de Django)
- Arquitectura conectable basada en la especificación WSGI
- Soporte integrado para la fragmentación de bases de datos
- Una interfaz basada en funciones en oposición a las jerarquías profundas y rígidas orientadas a objetos.
¿Es TurboGears para usted?
Si quiere desarrollar alegremente y desea un marco de trabajo probado, maduro y robusto, alejado del ruido mediático de «impresionante, next-gen» y todo eso, TurboGears es una gran opción. Es muy respetado en la comunidad y tiene una documentación completa y extensa.
Claro, TurboGears no es opinable, lo que significa que el tiempo inicial de instalación y configuración puede ser mayor, pero es el marco ideal para el desarrollo de aplicaciones empresariales.
Web2py
Web2py comenzó como un proyecto de hobby y fue lanzado en 2007. Sus objetivos son hacer que el desarrollo web sea fácil y accesible para todo el mundo.
Como resultado, Web2py lleva al extremo el enfoque de dependencia cero: no tiene requisitos, nada que instalar, e incluye un completo editor basado en web para el desarrollo, la gestión de bases de datos, así como el despliegue.
Casi se puede pensar en él como Android Studio, que es más un entorno completo que sólo un marco de trabajo. Algunas características agradables que Web2py tiene, son:
- Prácticamente ninguna curva de aprendizaje.
- Núcleo mínimo (sólo 12 objetos), ¡que incluso se puede memorizar!
- Plantillas Pure-Python
- Protección contra XSS, CSRF y otros ataques
- Una API agradable y consistente
¿Es Web2py para usted?
Web2py es un framework estable y divertido, pero es difícil recomendarlo frente a otras opciones como Django, Flask, etc. Apenas hay trabajos, y la historia de las pruebas unitarias no es gran cosa. Dicho esto, es posible que disfrute de la API de código y la experiencia general que ofrece el framework, especialmente si está construyendo APIs REST.
CherryPy
CherryPy es otro microframework que tiene como objetivo proporcionar la funcionalidad básica del framework y salir rápidamente del paso.
Aunque es comparable a otros microframeworks como Flask, CherryPy presume de alguna distinción:
- Contiene un servidor multihilo incorporado (algo que se queda en la lista de deseos de Flask)
- ¡El (único) servidor web puede alojar múltiples aplicaciones!
- Sirva su aplicación como una aplicación WSGI (para interactuar con otras aplicaciones WSGI) o como un servidor HTTP plano (que rinde mejor)
- Soporte de primera clase para perfiles y pruebas unitarias
- Funciona en PyPy (para los verdaderos adictos al rendimiento), Jython e incluso Android
CherryPy hace todo esto, y luego lo usual que usted esperaría de un framework web.
¿Es CherryPy para usted?
Si está construyendo principalmente servicios RESTful, CherryPy es un contendiente mucho más serio que Flask. Es un framework con una década de antigüedad que ha madurado muy bien y es adecuado para aplicaciones pequeñas y grandes por igual.
Sanic
El auge de Node y su modelo de programación asíncrona dejó a muchas comunidades rezagadas, la de Python incluida. En respuesta, un aluvión de frameworks web asíncronos han aparecido en el radar, siendo Sanic uno de ellos.
Sanic está fuertemente inspirado en Flask, hasta el punto de tomar prestados los decoradores de rutas, los Blueprints y otros fundamentos. Y no se avergüenzan de admitirlo. Lo que Sanic pone sobre la mesa, si usted es un fan de Flask, es una verdadera E/S no bloqueante para alcanzar los niveles de rendimiento de una aplicación Node. En otras palabras, ¡Sanic es Flask con soporte async/await
!
Cuando se compara con CherryPy, Sanic tiene una increíble ventaja en rendimiento (¡solo piense como le iría contra Flask!). Eche un vistazo a los siguientes resultados probados por DataWeave:
Como puede ver, una vez que los números de concurrencia empiezan a exceder 50 por segundo, CherryPy prácticamente se ahoga y arroja una alta tasa de fallas.
¿Es Sanic para usted?
Aunque las características de rendimiento de Sanic hacen volar todo lo demás fuera del agua, puede que no sea la mejor opción para su próximo proyecto. La razón principal es la falta de bibliotecas asíncronas.
La mayor parte de las herramientas y bibliotecas de Python existentes se escribieron para la versión CPython de un solo hilo, sin prever la alta concurrencia o las operaciones asíncronas. Si, por ejemplo, su ORM favorito no admite operaciones asíncronas, todo el sentido de utilizar Sanic queda anulado.
Debido a estas razones de madurez y disponibilidad, no examinaremos más marcos asíncronos en Python.
Masonite
Conocí este framework hace un tiempo y pensé que era un paso en la dirección correcta. Desde entonces, la versión 2.0 ha sido liberada, y siento que finalmente ha llegado el momento de darle a Masonite un poco de amor.
En pocas palabras, Masonite es la versión Python de Laravel (un famoso framework PHP, por si no lo sabía). ¿Por qué importa eso? Importa porque Laravel se construyó sobre los principios de Ruby on Rails, y juntos estos dos frameworks permiten a los desarrolladores que no usan Ruby experimentar la «manera Rails» de hacer las cosas.
Los desarrolladores de Laravel (y hasta cierto punto, de Rails) se sentirán como en casa y estarían listos y funcionando en literalmente nada de tiempo. Cuando probé Masonite (y sí que presenté un problema o dos, ¡incluido un error!), fui capaz de construir API REST con exactamente cero pensamiento porque mi memoria muscular de Laravel lo estaba haciendo todo.
Como un marco de pilas incluidas, full-stack, Masonite trae varias cosas interesantes a la mesa:
- ORM estilo Active-record
- Migraciones de base de datos (que, a diferencia de Django, deben ser creadas por el desarrollador)
- Un potente contenedor IoC para la inyección de dependencias
- CLI propia (llamada «craft») para andamiaje y ejecución de tareas
- Soporte de primera clase para pruebas unitarias
El mayor «rival» para Masonite es Django, ya que la comunidad está haciendo todo lo posible para comercializar el marco como fácil, delicioso, y la próxima gran cosa. Si superará a Django es algo que el tiempo dirá (si me pregunta, tiene una oportunidad decente), pero para una discusión comparando los dos, vea aquí.
¿Es Masonite para usted?
Masonite es todavía un bebé en comparación con Django, así que no hay manera de que pueda ser recomendado sobre Django. Dicho esto, si le gusta la forma Rails (o la forma Laravel) de hacer las cosas, apreciará lo que Masonite tiene que ofrecer. Es ideal para construir rápidamente prototipos que necesitan todo preconfigurado y fácil de cambiar.
Falcon
Falcon es un framework web en Python diseñado para microservicios a gran escala.
Dispone de un sistema completo con plantillas, paquetes complementarios y complementos que puede utilizar en su proyecto. Falcon es un excelente punto de partida para obtener todos los recursos que necesita.
El proyecto también cuenta con una sólida comunidad en la que los usuarios debaten sobre el diseño y el desarrollo de este marco.
Falcon ofrece las siguientes características;
- Depurable: Puede depurar fácilmente una aplicación Falcon, ya que le indica qué entradas conducen a qué salidas. Por suerte, todas las excepciones no manejadas en Falcon nunca están encapsuladas ni enmascaradas.
- Flexible: Falcon le da el control sobre los detalles de implementación, lo que le permite personalizar la aplicación como mejor le parezca. El enfoque minimalista facilita la depuración y el ajuste de su aplicación como mejor le parezca.
- Rapidez: Se ha demostrado que Falcon resuelve las solicitudes con mayor rapidez que otros frameworks. Este framework funciona perfectamente con PyPy.
- Compatible con ASGI y WSGI: Puede utilizar Falcon independientemente de si es un fan de la Interfaz de Pasarela de Servidor Asíncrono (ASGI) o de la Interfaz de Pasarela de Servidor Web (WSGI). WSGI es síncrona, lo que significa que gestiona las peticiones una tras otra (secuencialmente). ASGI es asíncrona, es decir, las peticiones se procesan simultáneamente.
¿Es Falcon adecuado para usted?
Falcon es una buena elección cuando está construyendo microservicios y API REST de misión crítica. El hecho de que este marco esté diseñado para ser rápido lo convierte en una opción excelente para aplicaciones que procesan múltiples transacciones al mismo tiempo.
Pyramid
Pyramid se presenta como «The Start Small, Finish Big, Stay Finished Framework». Si es usted un principiante, Pyramid le resultará fácil de poner en marcha.
El marco le permite elegir el enfoque a utilizar para la seguridad, plantillas, base de datos, y mucho más. Usted puede incluso comenzar con un andamio.
Pyramid ofrece las siguientes características;
- Escalabilidad: El hecho de que pueda empezar con algo pequeño no significa que su aplicación vaya a permanecer así para siempre. Pyramid cuenta con un sistema de ampliación, extensión y configuración que le ayudará a escalar su aplicación.
- Autenticación y autorización: Puede proteger su aplicación de accesos no autorizados gracias a sus funciones integradas de autorización y autenticación.
- Extensible: Pyramid está diseñada como un paquete completo para todo el ciclo de vida de la app. La plataforma está comprometida con la estabilidad de las API para garantizar que siempre disponga de API en las que pueda confiar.
- Altamente personalizable: Puede personalizar o anular el código central sin bifurcarlo. Este enfoque le permite crear aplicaciones que se adapten a sus necesidades.
¿Es Pyramid para usted?
Debería utilizar Pyramid cuando construya aplicaciones web basadas en contenidos y a gran escala. Su arquitectura modular y flexible facilita la escalabilidad de sus aplicaciones. Pyramid ofrece una fácil integración con bases de datos y tiene soporte incorporado para el enrutamiento flexible, por lo que es una opción perfecta para los sitios de contenido, tales como plataformas de noticias y blogs.
Tornado
Además de ser un marco de Python, Tornado es una biblioteca de redes asíncronas. A diferencia de la mayoría de los frameworks de Python que se basan en WSGI, Tornado se ejecuta con un solo hilo por proceso.
Todavía puede obtener soporte para WSGI a través de tornado.wsgi. Sin embargo, la mayoría de los desarrollos se basan en tornado
.web, la interfaz propia de Tornado.
Tornado ofrece las siguientes características;
- E/S de red no bloqueante: Esta biblioteca está construida sobre la biblioteca asyncio. Esto le permite manejar miles de conexiones a la vez sin mucha sobrecarga.
- Seguridad y autenticación: Tornado tiene características de seguridad como la protección contra la falsificación de peticiones en sitios cruzados, HTTPS y cookies. La misma librería tiene soporte de autenticación incorporado.
- Escalabilidad: Puede aumentar la capacidad o añadir más servidores según surja la necesidad mientras utiliza Tornado.
- Soporte WebSocket: Hay comunicación en tiempo real entre el servidor y el cliente a través de la implementación WebSocket incorporada.
¿Es Tornado para usted?
Tornado será una opción perfecta si desea construir servicios web de alto rendimiento. Este framework de Python es altamente escalable y su característica de E/S no bloqueante lo convierte en una opción perfecta si está construyendo un servicio que manejará un gran volumen de conexiones simultáneas.
Tornado también es adecuado para aplicaciones que manejan muchas operaciones de E/S, como el procesamiento de archivos de gran tamaño o la obtención de datos de API externas.
CubicWeb
CubicWeb es un marco de aplicaciones web semánticas que permite a los desarrolladores crear aplicaciones siguiendo los principios del diseño orientado a objetos.
El marco cuenta con un conjunto de bibliotecas y herramientas que los desarrolladores pueden utilizar para crear aplicaciones potentes.
CubicWeb está repleto de las siguientes características;
- Componentes reutilizables: Puede ahorrar tiempo de desarrollo reutilizando componentes en toda su aplicación.
- Utiliza un lenguaje de consulta: CubicWeb utiliza RQL, un lenguaje de consulta en segundo plano.
- Compatible con múltiples bases de datos: Aproveche la compatibilidad de CubicWeb con Mercurial, directorios LDAP y bases de datos SQL.
- Personalizable: CubicWeb es flexible y personalizable, lo que le permite controlar el funcionamiento de su aplicación.
¿Es CubicWeb adecuado para usted?
CubicWeb es una buena elección si desea construir aplicaciones que requieran capacidades flexibles de consulta y modelado de datos. Así, puede crear aplicaciones de redes sociales, gestión del conocimiento y gestión de datos científicos utilizando CubicWeb.
Conclusión
No hay escasez de frameworks Python por ahí, grandes y pequeños. Mientras que usted puede coger casi cualquier cosa para un proyecto pequeño, una aplicación empresarial tiene demandas que no muchos de estos frameworks pueden cumplir. Si me pregunta, para el desarrollo empresarial, Django (hasta cierto punto), Zope y TurboGears son los que me vienen a la mente. E incluso entre esos, me inclino por TurboGears.
Dicho esto, cualquier arquitecto que se precie puede coger un microframework y desplegar su arquitectura. Y esto es más o menos lo que ocurre en la práctica, lo que explica el éxito de Flask y otras ideas similares.
Si es usted un novato, este curso en línea le resultará útil para aprender Python.
A continuación, explore algunos de los marcos especializados de Python para construir API.