Flask vs Django

    En este artículo, echaremos un vistazo a dos de los frameworks 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, qué tan fácil es comenzar. A continuación, también veremos cómo estos dos se enfrentan entre sí para concluir cuándo usar uno de ellos.

    Empezando

    Una de las formas más fáciles de comparar dos marcos es instalándolos y tomando nota de la facilidad con la que un usuario puede empezar a utilizarlos, 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.

    Configurando Django

    En esta sección, configuraremos Django en una máquina con Linux. La mejor manera de comenzar con cualquier marco de Python es utilizando entornos virtuales. Lo instalaremos usando pip .

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

    Nota : Si el pip3comando le da un error, es posible que deba agregarle el prefijo sudopara que funcione.

    Una vez que terminamos de configurar nuestro entorno virtual, que hemos nombrado django_env, debemos activarlo para comenzar a usarlo:

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

    Una vez activado, finalmente podemos instalar Django:

    $ pip install Django
    

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

    $ mkdir mysite
    $ cd mysite
    $ django-admin startproject mysite
    

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

    mysite/
      manage.py 
      mysite/
        __init__.py 
        settings.py 
        urls.py 
        wsgi.py
    

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

    • El directorio ra√≠z mysite / 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 formas
    • mysite / directorio 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 del 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 utilizando la herramienta manage.py. El siguiente comando realiza algunas verificaciones del sistema, verifica las migraciones de la base de datos y algunas otras cosas antes de ejecutar su servidor:

    $ 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 : La ejecución de su servidor de esta manera está pensada solo para el desarrollo y no para entornos de producción.

    Para comprobar 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 podr√≠a 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:

    $ cd mysite
    $ python manage.py startapp myapp
    

    Esto crear√° otra estructura de directorio donde realmente puede administrar sus modelos, vistas, etc.

    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 views.pyy el enrutamiento de URL urls.py, que guardaremos para otro tutorial.

    Pero entiendes el punto, ¬Ņverdad? Se necesitan algunos comandos y bastantes archivos para que su proyecto Django est√© en funcionamiento.

    Configuración de Flask

    Al igual que Django, también usaremos un entorno virtual con Flask . Por 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.

    $ 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 Flask ejecutable a partir de un solo archivo:

    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:

    $ 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 animo a 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 formas de empezar a trabajar rápidamente.

    El marco que “gana” en esta √°rea realmente depende de sus necesidades y experiencia. Django puede ser m√°s favorable para los principiantes, ya que toma decisiones por ti (es decir, c√≥mo estructurar tu aplicaci√≥n), mientras que en Flask debes manejar esto t√ļ 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 Flask completa a partir de un solo archivo. Las compensaciones realmente no dependen de lo que más necesita.

    Curva de aprendizaje

    En cuanto a la curva de aprendizaje, como vimos en el √ļltimo apartado con Flask, fue muy f√°cil empezar. La aplicaci√≥n no requiere una estructura de directorios complicada en la que deba recordar qu√© directorio / archivo hace qu√©. En su lugar, puede agregar archivos y directorios a medida que avanza de acuerdo con su uso. De esto se trata Flask, como un micro-framework para el desarrollo web.

    Django, por otro lado, tiene una curva de aprendizaje un poco m√°s alta ya que es m√°s “exigente” acerca de c√≥mo se configuran y funcionan las cosas. Debido a esto, necesita tomar m√°s tiempo para aprender a componer m√≥dulos y trabajar dentro de los l√≠mites del marco.

    Sin embargo, esto no es del todo malo, ya que le permite conectar f√°cilmente componentes de terceros a su aplicaci√≥n sin tener que hacer ning√ļn trabajo para integrarlos.

    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 impulsar su sitio. Django, al ser un marco completo, a menudo se usa al principio del desarrollo porque obtienes muchos más recursos y potencia con él de inmediato.

    Estas son solo algunas empresas que usan (o han usado) Django para sus sitios:

    • Pinterest
    • Instagram
    • Disqus
    • NASA

    El matraz es un poco m√°s dif√≠cil de medir aqu√≠, principalmente por la forma en que se usa. Flask tiende a usarse m√°s para microservicios , lo que dificulta 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 utilizando potencialmente muchos marcos diferentes.

    Sin embargo, existen indicios de qui√©n usa Flask en funci√≥n de ofertas de trabajo, charlas t√©cnicas, publicaciones de blogs, etc. Por eso, sabemos que las siguientes empresas han usado Flask en alg√ļn lugar de su infraestructura de backend:

    • Twilio
    • Linkedin
    • Pinterest
    • Uber
    • Mailgun

    Si bien Django puede ser m√°s popular entre las empresas, Flask es posiblemente 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, micro marcos 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 ya 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 software de código abierto de terceros. En algunos casos, puede simplemente crear un proyecto de 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, o 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 lo que 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 elecci√≥n?

    Django es un proyecto muy grande. Una vez que un desarrollador, especialmente los principiantes, comienza a aprender Django, es fácil para ellos perderse en el código fuente, las características 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 hacer algo de trabajo extra para hacerlo.

    Comprender los componentes en Django puede ser un poco difícil y complicado a veces y puede llevar 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.

    Matraz

    Ahora que hemos visto algunos de los problemas con Django, no nos olvidemos de Flask. Dado que el marco de Flask es tan peque√Īo, no hay mucho de qu√© quejarse. Bueno, excepto por ese hecho ah√≠ mismo: es tan peque√Īo.

    Flask es un micro-framework, lo que significa que solo proporciona la funcionalidad básica para comenzar. Esto no significa que no pueda ser poderoso y no se 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, validación de datos, servicio de archivos, etc.

    Si bien esto podría considerarse una ventaja para aquellos que desean tener control sobre 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 no hace cada marco, intentemos hacer una comparación más directa de cada uno, lo que 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 decidir cómo desea implementar las cosas en un proyecto. En contraste con esto, Django proporciona una experiencia más inclusiva, como proporcionar un panel de administración predeterminado para sus datos, un ORM 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 soporte de la comunidad, entonces Django probablemente sea mejor en este sentido dada su historia. Ha existido desde 2005, mientras que Flask se creó en 2010. En el momento de escribir este artículo, Django tiene alrededor de 3.5 veces más preguntas / respuestas en Stack Overflow que Flask (aproximadamente 2600 preguntas de Django frente a 750 de Flask).

    El marco de 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.

    Flask debe seleccionarse para el desarrollo si necesita un control total sobre su aplicación, qué ORM desea usar, qué base de datos necesita integrar con excelentes oportunidades para aprender más 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 se ha hecho antes. Por ejemplo, un blog sería un buen caso de uso para Django.

    Aprende m√°s

    ¬ŅQuiere obtener m√°s informaci√≥n sobre cualquiera de estos marcos? Hay bastantes recursos disponibles. Aqu√≠ hay algunos cursos que he encontrado que son bastante √ļtiles y que lo pondr√°n al d√≠a mucho m√°s r√°pido:

    Bootcamp para desarrolladores web de Python y Django Full Stack

    API REST con Flask y Python

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

    De cualquier manera, lo m√°s importante es que los pruebe, trabaje con algunos ejemplos y decida por su cuenta 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 un simple “¬°Hola mundo!” aplicaci√≥n con cada uno.

    Es posible que descubra que si es nuevo en el desarrollo web y decide aprender Django, puede que le lleve un poco más de tiempo comprender realmente qué hacen todos los componentes subyacentes y cómo cambiarlos para que realmente hagan lo que quiere. Pero también hay muchos aspectos positivos, y una vez que domines Django, acabará ahorrándote mucho tiempo al final, 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 ellos lo preparará bien para encontrar un trabajo.

    Si necesita una recomendación, personalmente iría con Flask. Al aprender un marco que no te oculte tantas cosas, puedes aprender mucho, mucho más. Una vez que tenga una mejor comprensión de los conceptos centrales 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√© marco utiliza y por qu√©? ¬°H√°znoslo saber en los comentarios!

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *