8 grandes marcos web de Python

La conveniencia y versatilidad de Python significan que se utiliza para crear software en casi todos los ámbitos de la vida de TI. Un nicho importante son los servicios web, donde la velocidad de desarrollo de Python y las metáforas flexibles facilitan la puesta en marcha de sitios web rápidamente.

Y tal como puede adivinar, Python le brinda muchas opciones y latitud en los marcos web, tanto pequeños como grandes. Después de todo, no todos los proyectos web necesitan ser a escala empresarial. La mayoría deberían ser lo suficientemente grandes para hacer el trabajo, y no más grandes. Este artículo analiza ocho de los frameworks de Python más conocidos que enfatizan la simplicidad, la entrega liviana y un enfoque estricto.

Botella

La botella podría considerarse una especie de mini matraz, ya que es aún más compacta y concisa que ese otro "microframe". Debido a su huella mínima, Bottle es ideal para incluir en otros proyectos o para entregar rápidamente proyectos pequeños como las API REST. (El matraz se analiza a continuación). 

Todo el código base de Bottle cabe en un solo archivo y no tiene absolutamente ninguna dependencia externa. Aun así, Bottle viene equipado con suficiente funcionalidad para crear tipos comunes de aplicaciones web sin depender de ayuda externa.

El sistema de enrutamiento en Bottle, que asigna URL a funciones, tiene casi exactamente la misma sintaxis que Flask. Tampoco está limitado a un conjunto de caminos cableados; puede crearlos dinámicamente. Los datos de solicitud y respuesta, las cookies, las variables de consulta, los datos de formulario de una acción POST, los encabezados HTTP y la carga de archivos se pueden acceder y manipular mediante objetos en Bottle.

Cada capacidad se ha implementado prestando mucha atención a los detalles. Con las cargas de archivos, por ejemplo, no es necesario cambiar el nombre del archivo si su convención de nomenclatura entra en conflicto con el sistema de archivos de destino (como barras inclinadas en el nombre en Windows). La botella puede hacer eso por ti.

Bottle incluye su propio motor de plantillas HTML simple. Nuevamente, aunque mínimo, el motor de plantillas tiene todos los elementos esenciales. Las variables incluidas en una plantilla se representan con HTML seguro de forma predeterminada; tienes que indicar qué variables son seguras para reproducir literalmente. Si prefiere cambiar el motor de plantillas de Bottle por uno diferente, como Jinja2, Bottle le permite hacerlo sin problemas. Prefiero el sistema de plantilla simple incluido con Bottle; es rápido, su sintaxis no tiene pretensiones y le permite mezclar código y texto de plantilla sin demasiada dificultad.

Bottle incluso admite varios servidores. Viene con su propio miniservidor incorporado para pruebas rápidas, pero también admitirá WSGI genérico, una amplia variedad de servidores HTTP compatibles con WSGI y CGI simple y simple si es necesario.

Bottle no necesita tanta documentación como otros marcos, pero los documentos no son de ninguna manera escasos. Todas las cosas cruciales caben en una sola (aunque larga) página web. Más allá de eso, encontrará documentación completa para cada API, ejemplos para implementar en varias infraestructuras, una explicación del lenguaje de plantillas incorporado y una gran cantidad de recetas comunes.

Al igual que con Flask, puede ampliar la funcionalidad de Bottle manualmente o mediante complementos. Los complementos de botella no son tan numerosos como los de Flask, pero hay piezas útiles, como la integración con varias capas de bases de datos y la autenticación básica de usuarios. Para soporte asincrónico, Bottle puede usar uno de los adaptadores de servidor existentes que se ejecuta de forma asincrónica, como aiohttp / uvloop, pero async/awaitno es compatible de forma nativa.

Una consecuencia del minimalismo de Bottle es que algunos elementos simplemente no están allí. La validación de formularios, incluidas funciones como la protección CSRF (falsificación de solicitudes entre sitios), no está incluida. Si desea crear una aplicación web que admita un alto grado de interacción del usuario, deberá agregar ese soporte usted mismo.

Otro problema con Bottle es que el desarrollo se ha estancado; la última versión puntual, 0.12, llegó en 2013. Dicho esto, Bottle continúa manteniéndose y sus versiones de desarrollo siguen siendo utilizables para la producción. Los desarrolladores tienen la intención de ofrecer nuevas versiones que no sean compatibles con las ediciones heredadas de Python.

CherryPy

CherryPy ha existido de una forma u otra durante casi 20 años, pero no ha perdido el minimalismo y la elegancia que lo distinguió desde el principio.

El objetivo detrás de CherryPy, además de contener solo los bits necesarios para servir páginas web, es sentirse, en la medida de lo posible, no como un "marco web" sino como cualquier otro tipo de aplicación Python. Sitios como Hulu y Netflix han utilizado CherryPy en producción porque el marco proporciona una base muy discreta sobre la que construir. CherryPy utiliza subprocesos agrupados bajo el capó, lo mejor para admitir adaptadores de servidor multiproceso.

CherryPy le permite mantener su aplicación web separada de la lógica central. Para mapear las funciones de su aplicación a URL o rutas servidas por CherryPy, crea una clase donde los espacios de nombres de los objetos se mapean directamente a las URL que desea servir. Por ejemplo, la raíz del sitio web la proporciona una función denominada "índice". Los parámetros que se pasan a esas funciones se utilizan para manejar las variables proporcionadas por los métodos GET o POST.

Los bits que incluye CherryPy están destinados a funcionar como bloques de construcción de bajo nivel. Se incluyen identificadores de sesión y manejo de cookies, pero no las plantillas HTML. Al igual que Bottle, CherryPy ofrece una forma de mapear rutas a directorios en disco para el servicio de archivos estáticos.

CherryPy a menudo se remitirá a una biblioteca de terceros existente para admitir una función en lugar de proporcionarla de forma nativa. Las aplicaciones WebSocket, por ejemplo, no son compatibles con CherryPy directamente, sino a través de la biblioteca ws4py.

La documentación de CherryPy incluye un práctico tutorial paso a paso de los diversos aspectos del programa. No lo llevará a través de una aplicación completa de un extremo a otro, a diferencia de otros tutoriales de framework, pero sigue siendo útil. Los documentos vienen con notas útiles sobre la implementación en hosts virtuales, proxy inverso a través de Apache y Nginx, y muchos otros escenarios.

Halcón

Si está creando API basadas en REST y nada más, Falcon fue creado especialmente para usted. Esbelto y rápido, casi sin dependencias más allá de la biblioteca estándar, Falcon proporciona todo lo que necesita para las API REST y nada más. Falcon 2.0, lanzado en 2019, elimina el soporte de Python 2.xy requiere al menos Python 3.5.

Una gran parte de por qué Falcon se gana la etiqueta "ligero y delgado" tiene poco que ver con el número de líneas de código en el marco. Es porque Falcon casi no impone una estructura propia a las aplicaciones. Todo lo que tiene que hacer una aplicación Falcon es indicar qué funciones se asignan a qué puntos finales de API. Devolver JSON desde un punto final implica poco más que configurar una ruta y devolver los datos a través de la json.dumpsfunción de la biblioteca estándar de Python. El soporte para async aún no ha llegado a Falcon, pero se está trabajando para que eso suceda en Falcon 3.0.

Falcon también emplea valores predeterminados cuerdos y listos para usar, por lo que se necesitan pocos retoques para la configuración. Por ejemplo, los 404 se generan de forma predeterminada para cualquier ruta que no se declare explícitamente. Si desea devolver errores al cliente, puede generar una de una serie de excepciones de stock incluidas con el marco (como HTTPBadRequest) o utilizar una falcon.HTTPErrorexcepción genérica . Si necesita preprocesamiento o posprocesamiento para una ruta, Falcon también proporciona ganchos para esos.

El enfoque de Falcon en las API significa que aquí hay poco para crear aplicaciones web con interfaces de usuario HTML convencionales. No espere mucho en cuanto a funciones de procesamiento de formularios y herramientas de protección CSRF, por ejemplo. Dicho esto, Falcon ofrece opciones elegantes para ampliar su funcionalidad, por lo que se pueden construir elementos más sofisticados. Además del mecanismo de enlace mencionado anteriormente, encontrará una interfaz para crear middleware que se puede usar para empaquetar todas las API de Falcon.

La documentación de Falcon es escasa en comparación con otros marcos, pero solo porque hay menos que cubrir. La guía del usuario incluye un recorrido formal paso a paso de todas las funciones principales, junto con una sección de inicio rápido que le permite ver código de muestra con o sin anotaciones.

FastAPI

El nombre de FastAPI es un buen resumen de lo que hace. Está diseñado para crear puntos finales de API rápidamente y también se ejecuta rápido.

FastAPI utiliza el proyecto Starlette para su núcleo de red de alta velocidad, pero no es necesario conocer los componentes internos de Starlette para usar FastAPI. Usted define los puntos finales de la misma manera que una aplicación Flask o Bottle (use decoradores para indicar qué funciones manejan qué rutas) y luego devuelve diccionarios que se traducen automáticamente a JSON.

Puede anular fácilmente cómo se devuelven las cosas. Por ejemplo, si desea devolver HTML / XML desde algunos puntos finales, puede hacerlo simplemente devolviendo un Responseobjeto personalizado . Si desea agregar middleware personalizado, puede insertar cualquier cosa que siga el estándar ASGI. 

FastAPI hace uso de la sugerencia de tipo de Python para proporcionar restricciones sobre los tipos de datos que aceptan las rutas. Por ejemplo, si tiene una ruta con el tipo Optional[int], FastAPI rechazará cualquier envío excepto los números enteros. No tiene que agregar código de validación de datos a sus puntos finales; puede usar sugerencias de tipo y dejar que FastAPI haga el trabajo.

Naturalmente, algunas cosas quedan fuera. No hay un motor de plantillas HTML nativo, por ejemplo, pero no faltan soluciones de terceros para llenar ese vacío. Lo mismo ocurre con la conectividad de la base de datos, pero la documentación contiene detalles sobre cómo convencer a ciertos ORM (por ejemplo, Peewee) para que funcionen con los comportamientos asíncronos de FastAPI.

Matraz

Muchas discusiones sobre los marcos web de Python comienzan con Flask, y por una buena razón. Flask es un marco bien establecido y bien entendido que es fácil de usar y bastante estable. Es casi imposible equivocarse con Flask para un proyecto web ligero o una API REST básica, pero se enfrentará a un trabajo pesado si intenta construir algo más grande.

El atractivo central de Flask es su baja barrera de entrada. Se puede configurar una aplicación básica de "hola mundo" en menos de 10 líneas de Python. Flask incluye un sistema de plantillas HTML ampliamente utilizado, Jinja2, para facilitar la renderización de texto, pero Jinja2 se puede cambiar por cualquier número de otros motores de plantilla (como Moustache) o puedes crear el tuyo propio.

En nombre de la simplicidad, Flask omite sutilezas como una capa de datos u ORM, y no ofrece disposiciones para la validación de formularios. Sin embargo, Flask se puede expandir mediante extensiones, de las cuales hay docenas, que cubren muchos casos de uso comunes, como el almacenamiento en caché, el manejo y validación de formularios y la conectividad de la base de datos. Este diseño ajustado por defecto le permite comenzar a diseñar una aplicación Flask con el mínimo absoluto de funcionalidad, y luego colocar en capas solo las piezas que necesita cuando las necesita.

La documentación de Flask es genial y fácil de leer. El documento de inicio rápido hace un excelente trabajo al ayudarlo a comenzar al mismo tiempo que explica la importancia de las opciones predeterminadas para una aplicación Flask simple, y los documentos de API están repletos de buenos ejemplos. También es excelente la colección de fragmentos de Flash, que son ejemplos rápidos y sucios de cómo realizar tareas específicas, como cómo devolver un objeto si existe o un error 404 si no existe.

Flask alcanzó su lanzamiento histórico 1.0 en 2018, con Python 2.6 y Python 3.3 siendo las versiones mínimas compatibles, y con muchos de sus comportamientos finalmente grabados en piedra. Flask no admite explícitamente la sintaxis asíncrona de Python, pero se ha desarrollado una variación de Flask compatible con API llamada Quart para satisfacer esa demanda.

Pirámide

Pyramid, pequeño y liviano, se adapta bien a tareas como exponer el código Python existente como una API REST o proporcionar el núcleo de un proyecto web donde el desarrollador hace la mayor parte del trabajo pesado.

"Pyramid le permitirá volverse productivo rápidamente y crecerá con usted", dice la documentación. "No lo detendrá cuando su aplicación sea pequeña y no se interpondrá en su camino cuando su aplicación se vuelva grande".

Una buena forma de describir el minimalismo de Pyramid sería "libre de políticas", un término utilizado en la sección de la documentación que analiza cómo Pyramid se adapta a otros marcos web. Básicamente, "libre de políticas" significa que la base de datos o el lenguaje de plantillas que elija utilizar no es asunto de Pyramid.

Se necesita muy poco trabajo para construir una aplicación Pyramid básica. Al igual que con Bottle y Flask, una aplicación Pyramid puede constar de un solo archivo Python, además de los archivos del marco en sí. Una API simple de una ruta no requiere más de una docena de líneas de código. La mayor parte son from … importdeclaraciones repetitivas y la configuración del servidor WSGI.

De forma predeterminada, Pyramid incluye varios elementos que son comunes en las aplicaciones web, pero se proporcionan como componentes para unirlos, no como soluciones completas. El soporte para sesiones de usuario, por ejemplo, incluso viene con protección CSRF. Pero el soporte para cuentas de usuario, como inicios de sesión o administración de cuentas, no es parte del trato. Tendrá que enrollarlo usted mismo o agregarlo a través de un complemento. Lo mismo ocurre con el manejo de formularios y las conexiones de bases de datos.

Pyramid incluso proporciona una forma de crear plantillas de proyectos anteriores de Pyramid para reutilizar trabajos anteriores. Estas plantillas, llamadas "andamios", generan una aplicación Pyramid con enrutamiento simple y algunas plantillas HTML / CSS de inicio. Los andamios incluidos incluyen un proyecto inicial de muestra y un proyecto que se conecta a bases de datos a través de la popular biblioteca de Python SQLAlchemy.