En general, un framework es similar a una biblioteca, pero forma un núcleo más central para una aplicación.
Comencemos por ver qué es una biblioteca. Es una colección de código, ya sea en formato compilado o de código fuente, que proporciona un conjunto de funcionalidad a otro programa. Por ejemplo, una biblioteca de gráficos permite que un programa acceda a piezas pre escritas de código para generar una salida gráfica.
Un framework va un paso más allá y proporciona la funcionalidad de la biblioteca y una estructura para basar toda la aplicación alrededor.
Así que, por ejemplo, tome "Django" un popular framework de aplicaciones web en python. Con Django usted a) Crearía "Vistas", páginas web con plantillas para que el framework las sirva, b) Controladores, piezas de código que suministran datos a la vista, e interpretan la información entrante para dirigir el procesamiento que el controlador necesita hacer, entre otras cosas. c) Modelos, objetos utilizados por los controladores (y a veces las vistas) que representan varios elementos de datos que necesitan ser creados, leídos, actualizados o eliminados (CRUD!) generalmente desde una base de datos. Los modelos también pueden ser actualizados con código para hacer que los datos se comporten de una manera más inteligente, por ejemplo asegurando que las contraseñas coincidan, que una compra de 10 widgets a 2 dólares lleve a una compra de 20 dólares. etc. Y d) definiciones de 'rutas', definiciones de URLs que indican al framework qué urls llevan a qué controladores (y por tanto a las vistas).
Ahora compara esto con la librería CGI de python. La biblioteca CGI también le permitirá crear aplicaciones web, pero usted tendría que poner en un montón de trabajo fuera de la biblioteca, en primer lugar la configuración del navegador web para servir el contenido CGI (cada vez más raro en estos días, CGI es muy 90s tecnología), usted tendría que inventar su propia manera de crear la página web en sí , tendrías que estructurar tú mismo las interacciones de las páginas, posiblemente escribiendo código para analizar y decodificar los datos POST o GET entrantes, tendrías que inventar tu propia capa de base de datos para almacenar los datos entrantes y recuperar los salientes, y así sucesivamente. Para hacer esto podrías usar, digamos, una librería CGI para interactuar con el servidor web, una librería de plantillas Jinja2 para construir las páginas, SQLAlchemy para interactuar con la base de datos, y luego quizás algunas librerías para ayudar a validar los datos y demás. Esta es una forma perfectamente válida de construir un sitio web, pero la construcción de la aplicación puramente a partir de las bibliotecas individuales es una tarea mucho más fragmentaria y laboriosa, ya que no hay construido en las interacciones entre las bibliotecas para aprovechar. Un marco de trabajo tiene todas las "baterías" incluidas, y todas conectadas entre sí para ahorrarte el esfuerzo.
La desventaja, por supuesto, es que a veces no quieres todo el volumen de un marco de trabajo. Django incluye una gran variedad de componentes para usar, todo desde generadores de sitios de administración, a utilidades de migración de bases de datos, a funciones de traducción de idiomas, código para trabajar con datos geográficos en mapas y así sucesivamente, y para un sitio simple usted podría usar muy poco de eso. En este caso, podría optar por un simple script CGI, o podría utilizar un micro-framework como Flask, que es un framework mucho más simple y menos capaz que sólo incluye unas pocas partes (plantillas, controladores y rutas, sin modelos) y cualquier funcionalidad extra necesaria se suministra mediante la adición de bibliotecas (es decir, SqlAlchemy o peewee).