Frasco contra Django

En este artículo, veremos dos de los marcos web más populares en Python: Django y Flask. Aquí, cubriremos cómo cada uno de estos marcos...

En este artículo, veremos dos de los marcos web más populares en Python: Django y Flask.

Aquí, cubriremos cómo se compara cada uno de estos marcos al observar sus curvas de aprendizaje, lo fácil que es comenzar. A continuación, también veremos cómo estos dos se enfrentan entre sí y concluiremos cuándo usar uno de ellos.

Comenzando

Una de las formas más fáciles de comparar dos marcos es instalarlos y tomar nota de la facilidad con la que un usuario puede comenzar a usarlo, que es exactamente lo que haremos a continuación. Intentaremos configurar Django y Flask en una máquina Linux y crearemos una aplicación para ver qué tan fácil (o difícil) es el proceso con cada uno.

Configuración de Django

En esta sección, configuraremos Django en una máquina con Linux. La mejor manera de comenzar con cualquier marco de trabajo de Python es usando entornos virtuales. Lo instalaremos usando [Pepita] (https://en.wikipedia.org/wiki/Pip_(package_manager)).

1
2
3
$ sudo apt-get install python3-pip
$ pip3 install virtualenv
$ virtualenv --python=`which python3` ~/.virtualenvs/django_env

Nota: si el comando pip3 le da un error, es posible que deba agregarle el prefijo sudo para que funcione.

Una vez que hayamos terminado de configurar nuestro entorno virtual, al que hemos llamado django_env, debemos activarlo para comenzar a usarlo:

1
$ source ~/.virtualenvs/django_env/bin/activate

Una vez activado, finalmente podemos instalar Django:

1
$ pip install Django

Supongamos que nuestro proyecto se llama misitio. Cree un nuevo directorio e ingréselo, ejecute los siguientes comandos:

1
2
3
$ mkdir mysite
$ cd mysite
$ django-admin startproject mysite

Si inspecciona el proyecto resultante, la estructura de su directorio se mostrará como:

1
2
3
4
5
6
7
mysite/
  manage.py 
  mysite/
    __init__.py 
    settings.py 
    urls.py 
    wsgi.py

Echemos un vistazo a lo que es importante acerca de cada uno de los directorios y archivos que se crearon.

  • El directorio raíz misitio/ es el directorio contenedor de nuestro proyecto
  • manage.py es una herramienta de línea de comandos que nos permite trabajar con el proyecto de diferentes maneras
  • El directorio mysite/ es el paquete Python de nuestro código de proyecto
  • mysite/__init__.py es un archivo que informa a Python que el directorio actual debe considerarse un paquete de Python
  • mysite/settings.py contendrá las propiedades de configuración para el proyecto actual
  • mysite/urls.py es un archivo de Python que contiene las definiciones de URL para este proyecto
  • mysite/wsgi.py actúa como una entrada para un servidor web WSGI que reenvía solicitudes a su proyecto

Desde aquí, podemos ejecutar la aplicación usando la herramienta manage.py. El siguiente comando realiza algunas comprobaciones del sistema, comprueba las migraciones de la base de datos y algunas otras cosas antes de ejecutar su servidor:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ python manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

September 20, 2017 - 15:50:53
Django version 1.11, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Nota: Ejecutar su servidor de esta manera está destinado únicamente a entornos de desarrollo y no a entornos de producción.

Para verificar su aplicación, diríjase a http://localhost:8000/, donde debería ver una página que dice "¡Funcionó!".

Pero espera, ¡todavía no has terminado! Para crear realmente cualquier página/funcionalidad en su sitio, necesita crear una aplicación dentro de su proyecto. Pero, ¿por qué necesitas una aplicación? En Django, las aplicaciones son aplicaciones web que hacen algo, que puede ser un blog, un foro o un sistema de comentarios. El proyecto es una colección de sus aplicaciones, así como la configuración de las aplicaciones y el sitio web completo.

Entonces, para crear su aplicación, muévase al directorio de su proyecto y ejecute el siguiente comando:

1
2
$ cd mysite
$ python manage.py startapp myapp

Esto creará otra estructura de directorios donde podrá administrar sus modelos, vistas, etc.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
manage.py
myapp/
  __init__.py
  admin.py
  apps.py
  migrations/
  models.py
  tests.py
  views.py
mysite/
  __init__.py 
  settings.py 
  urls.py 
  wsgi.py

Desde aquí, debe configurar sus vistas en views.py y el enrutamiento de URL en urls.py, que guardaremos para otro tutorial.

Pero entiendes el punto, ¿verdad? Se necesitan algunos comandos y bastantes archivos para poner en marcha su proyecto Django.

Configuración de Flask

Al igual que Django, también usaremos un entorno virtual con Matraz. Por lo tanto, los comandos para activar un entorno virtual seguirán siendo los mismos que antes. Después de eso, en lugar de instalar Django, instalaremos Flask.

1
$ pip install Flask

Una vez que se completa la instalación, podemos comenzar a crear nuestra aplicación Flask. Ahora, a diferencia de Django, Flask no tiene una estructura de directorios complicada. La estructura de su proyecto Flask depende totalmente de usted.

Tomando prestado un ejemplo de la página de inicio de Flask, puede crear una aplicación de Flask ejecutable a partir de un solo archivo:

1
2
3
4
5
6
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

Y ejecutar la aplicación es tan fácil como configurarla:

1
2
$ FLASK_APP=hello.py flask run
 * Running on http://localhost:5000/

Visitar la URL http://localhost:5000/ debería mostrar el texto "¡Hola mundo!" en su navegador.

Le recomiendo que busque algunas aplicaciones de muestra en la página de inicio de Flask para obtener más información. Aprender con el ejemplo es una de las mejores maneras de ponerse en marcha rápidamente.

El marco que "gana" en esta área está realmente a la altura de sus necesidades y experiencia. Django puede ser más favorable para los principiantes, ya que toma decisiones por usted (es decir, cómo estructurar su aplicación), mientras que en Flask debe manejar esto usted mismo.

Por otro lado, Flask es más sencillo de poner en marcha ya que requiere muy poco para ponerse en marcha. Se puede componer una aplicación completa de Flask a partir de un solo archivo. Las compensaciones realmente no dependen de lo que más necesites.

Curva de aprendizaje

En cuanto a la curva de aprendizaje, como vimos en la última sección con Flask, fue muy fácil comenzar. La aplicación no requiere una estructura de directorios complicada en la que necesita recordar qué directorio/archivo hace qué. En su lugar, puede agregar archivos y directorios a medida que avanza de acuerdo con su uso. De eso se trata Flask, como un marco micro para el desarrollo web.

Django, por otro lado, tiene una curva de aprendizaje un poco más alta ya que es más "quisquilloso" acerca de cómo se configuran y funcionan las cosas. Debido a esto, debe dedicar más tiempo a aprender a componer módulos y trabajar dentro de los límites del marco.

Sin embargo, esto no es del todo malo, ya que te permite conectar fácilmente componentes de terceros a tu aplicación sin tener que hacer ningún trabajo integrándolos.

Empleabilidad

¿Cuál de estos marcos te ayudará a conseguir un trabajo? Para muchos desarrolladores, esta es una de las preguntas más importantes con respecto a ciertas bibliotecas y marcos: ¿cuál me ayudará a ser contratado?

Django tiene bastantes empresas grandes en su currículum, lo que se debe a que muchas empresas que usan Python para el desarrollo web tienden a usar (o al menos comenzaron con) Django para potenciar su sitio. Django, al ser un marco de trabajo completo, a menudo se usa al principio del desarrollo porque obtiene muchos más recursos y potencia con él de forma inmediata.

Aquí hay algunas compañías que usan (o han usado) Django para sus sitios:

  • Pinterest -Instagram
  • Disco
  • NASA

Flask es un poco más difícil de medir aquí, principalmente debido a la forma en que se usa. Flask tiende a usarse más para microservicios, lo que hace que sea más difícil saber qué empresas lo están usando. Además, es menos probable que las empresas con una arquitectura de microservicios digan que su servicio está “impulsado por Flask”, ya que es probable que tengan muchos servicios que potencialmente utilicen muchos marcos diferentes.

Sin embargo, hay indicios de quién usa Flask en función de ofertas de trabajo, charlas técnicas, publicaciones de blogs, etc. A partir de ellos, sabemos que las siguientes empresas han usado Flask en algún lugar de su infraestructura de back-end:

-Twilio

  • Linkedin
  • Pinterest -Uber
  • Pistola de correo

Si bien Django puede ser más popular entre las empresas, se puede decir que Flask es más común entre las empresas más centradas en la tecnología, ya que es más probable que utilicen microservicios y, por lo tanto, micromarcos como Flask.

Tamaño y alcance del proyecto

Nuestra comparación de cada marco puede volverse muy subjetiva gracias a muchos factores diferentes, como el alcance del proyecto, la experiencia del desarrollador, el tipo de proyecto, etc. Si el proyecto es bastante pequeño y no necesita toda la sobrecarga que viene con Django, entonces Flask es la opción ideal para comenzar y hacer algo muy rápidamente.

Sin embargo, si el proyecto es de mayor duración y alcance, es probable que Django sea el camino a seguir, ya que incluye gran parte de lo que necesita. Básicamente, esto significa que muchos componentes comunes de un servicio web/sitio web ya vienen con Django o ya están disponibles a través de un software de código abierto de terceros. En algunos casos, puede simplemente crear un proyecto Django, conectar un montón de componentes, crear sus vistas/plantillas y listo.

Si bien elogiamos a Django por su extensibilidad, no podemos ignorar que Flask tiene algunas extensiones propias. Si bien no tienen un alcance tan grande como Django (y muchas de estas extensiones son estándar en Django), es un paso en la dirección correcta.

Los componentes complementarios de Django pueden ser tan grandes como un complemento de blog, hasta tan pequeños como una pequeña validación de entrada de middleware. La mayoría de las extensiones de Flask son pequeños componentes de middleware, lo que es mejor que nada y muy útil, considerando el tamaño promedio de los proyectos de Flask.

Limitaciones

Cada pieza de tecnología tiene sus problemas, y estos marcos no son diferentes. Entonces, antes de elegir cuál usar, es posible que desee saber qué desventajas tiene cada uno, de las cuales hablaremos en esta sección.

Django

Entonces, ¿cuáles son los aspectos de Django que funcionan en su contra para ser seleccionado como su marco de trabajo de elección?

Django es un proyecto muy grande. Una vez que un desarrollador, especialmente los principiantes, comienzan a aprender Django, es fácil que se pierdan en el código fuente, las funciones integradas y los componentes que proporciona, sin siquiera usarlos en una aplicación.

Django es un marco bastante grande para implementar en casos de uso simples, ya que le oculta gran parte del control. Si quieres usar algo que no es "estándar" en Django, entonces tienes que trabajar un poco más para hacerlo.

Comprender los componentes en Django puede ser un poco difícil y engañoso a veces y puede conducir a decisiones difíciles, como decidir si un componente existente funcionará para su caso de uso, o si terminará causándole más trabajo del que vale. .

Frasco

Ahora que hemos visto algunos de los problemas con Django, no nos olvidemos de Flask. Dado que el marco Flask es tan pequeño, no hay mucho de qué quejarse. Bueno, excepto por ese hecho justo ahí: Es tan pequeño.

Flask es un micromarco, lo que significa que solo proporciona la funcionalidad básica para que pueda comenzar. Esto no significa que no pueda ser poderoso y no pueda escalar, solo significa que tendrá que crear gran parte de la funcionalidad de su servicio usted mismo. Esto significa que deberá manejar la integración de su base de datos, la validación de datos, el servicio de archivos, etc.

Si bien esto podría considerarse una ventaja para aquellos que desean controlar todo, también significa que le llevará más tiempo configurar un sitio web completamente funcional.

Elegir Flask o Django

Si bien es fácil hablar sobre lo que hace y lo que no hace cada marco, intentemos hacer una comparación más directa de cada uno, lo cual haremos en esta sección.

Cuando la simplicidad es un factor, Flask es el camino a seguir. Permite mucho más control sobre su aplicación y le permite a usted decidir cómo desea implementar las cosas en un proyecto. En contraste con esto, Django brinda una experiencia más inclusiva, como proporcionar un panel de administración predeterminado para sus datos, un [ORM] (https://en.wikipedia.org/wiki/Object-relational_mapping) en la parte superior de su base de datos, y protección contra cosas como inyección SQL, secuencias de comandos entre sitios, CSRF, etc.

Si pone mucho énfasis en el apoyo de la comunidad, Django probablemente sea mejor en este sentido dada su historia. Ha existido desde 2005, mientras que Flask se creó en 2010. Al momento de escribir este artículo, Django tiene alrededor de 3,5 veces más preguntas/respuestas en Stack Overflow que Flask (alrededor de 2600 preguntas de Django frente a las 750 de Flask).

El marco Flask es relativamente ligero. De hecho, es casi 2,5 veces más pequeño que Django en términos de cantidad de código. Esa es una gran diferencia, especialmente si necesita comprender el funcionamiento interno de su marco web. En este aspecto, Flask será mucho más fácil de leer y comprender para la mayoría de los desarrolladores.

Se debe seleccionar Flask para el desarrollo si necesita un control completo sobre su aplicación, qué ORM desea usar, qué base de datos necesita integrar con excelentes oportunidades para obtener más información sobre los servicios web. Django, por otro lado, es mejor cuando hay un camino más claro para crear lo que quieres, o estás creando algo que ya se ha hecho antes. Por ejemplo, un blog sería un buen caso de uso para Django.

Más información {#más información}

¿Quieres aprender más sobre cualquiera de estos marcos? Hay bastantes recursos por ahí. Aquí hay algunos cursos que he encontrado que son bastante útiles, y te pondrán al día mucho más rápido:


Campamento de entrenamiento para desarrolladores web Python y Django Full Stack


API REST con Flask y Python

De lo contrario, también puede obtener un gran comienzo visitando los respectivos sitios web de cada marco:

Error 500 (Server Error)!!1500.That’s an error.There was an error. Please try again later.That’s all we know.

De cualquier manera, lo más importante es que realmente los pruebe, analice algunos ejemplos y decida por sí mismo cuál es el mejor para usted.

Conclusión

En este artículo, comparamos los dos frameworks web, Django y Flask, observando sus diferentes propiedades y configurando una aplicación "Hello World" simple con cada uno.

Es posible que descubras que si eres nuevo en el desarrollo web y decides aprender Django, puede llevarte un poco más de tiempo comprender realmente qué hacen todos los componentes subyacentes y cómo cambiarlos para que realmente hagan lo que quieres. Pero también hay muchos aspectos positivos, y una vez que domine Django, al final terminará ahorrándole mucho tiempo, dada su enorme lista de componentes y el amplio apoyo de la comunidad.

Solo se puede realizar una comparación más avanzada para cualquier marco con casos de uso y escenarios avanzados. Solo sepa que realmente no puede equivocarse con ninguno de los dos, y aprender cualquiera de los dos lo preparará bien para encontrar un trabajo.

Si necesita una recomendación, personalmente iría con Flask. Al aprender un marco que no te oculta tantas cosas, puedes aprender mucho, mucho más. Una vez que tenga una mejor comprensión de los conceptos básicos del desarrollo web y HTTP, puede comenzar a usar complementos que abstraigan esto de usted. Pero tener esa base sólida de comprensión es más importante desde el principio, en mi opinión.

¿Qué framework usas y por qué? ¡Cuéntanos en los comentarios!