Cambios

Versión 3.1.0

Lanzado el 13-11-2024

  • Deja de ser compatible con Python 3.8. #5623

  • Actualiza las versiones de dependencia mínima a las últimas versiones de características. Werkzeug >= 3.1, ItsDangerous >= 2.2, Blinker >= 1.9. #5624,5633

  • Proporciona una opción de configuración para controlar las respuestas automáticas de las opciones. #5496

  • Flask.open_resource/open_instance_resource` y Blueprint.open_resource toman un parámetro encoding para usarlo al abrir en modo texto. Por defecto es utf-8. #5504

  • Request.max_content_length se puede personalizar por petición en lugar de sólo a través de la MAX_CONTENT_LENGTH config. Añadida la configuración MAX_FORM_MEMORY_SIZE y MAX_FORM_PARTS. Añadida documentación sobre límites de recursos a la página de seguridad. #5625

  • Añadir compatibilidad con el atributo de cookie «Partitioned» (CHIPS), con la configuración «SESSION_COOKIE_PARTITIONED». #5472

  • -e path tiene prioridad sobre los archivos por defecto .env y .flaskenv. load_dotenv carga los archivos por defecto además de una ruta a menos que se pase load_defaults=False. #5628

  • Admite la rotación de claves con la configuración SECRET_KEY_FALLBACKS, una lista de claves secretas antiguas que aún pueden utilizarse para desfirmar. Las extensiones tendrán que añadir soporte. #5621.

  • Se ha corregido la interacción de host_matching=True o subdomain_matching=False con SERVER_NAME. Al establecer SERVER_NAME, ya no se restringen las peticiones únicamente a ese dominio. #5553

  • Se comprueba Request.trusted_hosts durante el enrutamiento, y puede establecerse mediante la configuración TRUSTED_HOSTS. #5636

Versión 3.0.3

Lanzado el 07-04-2024

  • Es posible que el valor predeterminado «hashlib.sha1» no esté disponible en las compilaciones FIPS. No acceda a él en el momento de la importación para que el desarrollador tenga tiempo de cambiar el valor predeterminado. #5448

  • No inicialices el atributo «cli» en el scaffold sansio, sino en la clase concreta «Flask». #5270

Versión 3.0.2

Lanzado el 03-02-2024

  • Tipo correcto para la propiedad «jinja_loader». #5388

  • Corregir error con las opciones CLI «–extra-files» y «–exclude-patterns». #5391

Versión 3.0.1

Lanzado el 18-01-2024

  • Tipo correcto para el argumento «path» de «send_file». #5336

  • Corregir un error tipográfico en un mensaje de error para la opción «flask run –key». #5344

  • Los datos de sesión no se etiquetan sin depender del «json.loads» «object_hook» integrado. Esto permite que otros proveedores JSON que no lo implementan. #5381

  • Abordar más hallazgos de tipos al utilizar el modo estricto de mypy. #5383

Versión 3.0.0

Lanzado el 21-05-2021

  • Eliminar código obsoleto. #5223

  • Descontinuar el atributo «__version__». Utilizar la detección de características o «importlib.metadata.version(«flask»)» en su lugar. #5230

  • Reestructurar el código de modo que las clases Flask (app) y Blueprint tengan bases Sans-IO. #5127

  • Permite utilizar «self» como argumento para url_for. #5264

  • Requiere Werkzeug >= 3.0.0.

Versión 2.3.3

Lanzado el 21-08-2023

  • Compatibilidad con Python 3.12.

  • Requiere herramienta >= 2.3.7.

  • Utiliza «flit_core» en lugar de «setuptools» como backend de compilación.

  • Refactorizar cómo se determinan las rutas raíz y de instancia de una aplicación. #5160

Versión 2.3.2

Lanzado el 01-05-2023

  • Establecer el encabezado «Vary: Cookie» cuando se acceda, modifique o actualice la sesión.

  • Actualiza los requisitos de Werkzeug a >=2.3.3 para aplicar las correcciones de errores recientes.

Versión 2.3.1

Lanzado el 25-04-2023

  • Restaurar «from flask import Markup», ahora en desuso. #5084

Versión 2.3.0

Lanzado el 25-04-2023

  • Se deja de ofrecer soporte para Python 3.7. #5072

  • Actualiza los requisitos mínimos a las últimas versiones: Werkzeug>=2.3.0, Jinja2>3.1.2, itsdangerous>=2.1.2, click>=8.1.3.

  • Eliminar código obsoleto. #4995

    • Se han eliminado los métodos «push» y «pop» de los objetos obsoletos «_app_ctx_stack» y «_request_ctx_stack». «top» sigue existiendo para dar más tiempo a las extensiones para actualizarse, pero se eliminará.

    • Se eliminan la variable de entorno FLASK_ENV, la clave de configuración ENV y la propiedad app.env.

    • Se eliminan las propiedades «session_cookie_name», «send_file_max_age_default», «use_x_sendfile», «propagate_exceptions» y «templates_auto_reload» de «app».

    • Se han eliminado las claves de configuración «JSON_AS_ASCII», «JSON_SORT_KEYS», «JSONIFY_MIMETYPE» y «JSONIFY_PRETTYPRINT_REGULAR».

    • Se eliminan los decoradores «app.before_first_request» y «bp.before_app_first_request».

    • Se eliminan los atributos «json_encoder» y «json_decoder» de la aplicación y el blueprint, así como las clases correspondientes «json.JSONEncoder» y «JSONDecoder».

    • Se han eliminado las funciones «json.htmlsafe_dumps» y «htmlsafe_dump».

    • Llamar a métodos de configuración en blueprints después del registro es un error en lugar de una advertencia. #4997

  • La importación de escape y Markup desde flask está obsoleta. Importa directamente desde markupsafe en su lugar. #4996

  • La propiedad app.got_first_request está obsoleta. #4997

  • El decorador locked_cached_property está obsoleto. Utiliza un bloqueo dentro de la función decorada si es necesario bloquear. #4993

  • Las señales siempre están disponibles. blinker>=1.6.2 es una dependencia necesaria. El atributo``signals_available`` está obsoleto. #5056

  • Las señales admiten funciones suscriptoras async. #5049

  • Se eliminan usos de bloqueos que podían provocar que las solicitudes se bloquearan entre sí durante breves instantes. #4993

  • Se utilizan metadatos de empaquetado modernos con pyproject.toml en lugar de setup.cfg. #4947

  • Se garantiza que los subdominios se apliquen correctamente con blueprints anidados. #4834

  • config.from_file puede usar text=False para indicar que el analizador espera un archivo binario en su lugar. #4989

  • Si un blueprint se crea con un nombre vacío, se lanza un ValueError. #5010

  • SESSION_COOKIE_DOMAIN no recurre a SERVER_NAME. El valor predeterminado es no establecer el dominio, lo que los navegadores modernos interpretan como una coincidencia exacta en lugar de una coincidencia de subdominio. También se eliminan las advertencias sobre localhost y direcciones IP. #5051

  • El comando routes muestra el subdomain o host de cada regla cuando se utiliza la coincidencia por dominio. #5004

  • Se utiliza la evaluación diferida de las anotaciones. #5071

Versión 2.2.5

Lanzado el 02-05-2023

  • Actualización para compatibilidad con Werkzeug 2.3.3.

  • Establecer el encabezado «Vary: Cookie» cuando se acceda, modifique o actualice la sesión.

Versión 2.2.4

Lanzado el 25-04-2023

  • Actualización para compatibilidad con Werkzeug 2.3.

Versión 2.2.3

Lanzado el 15-02-2023

  • Autoescape está habilitado de forma predeterminada para los archivos de plantilla .svg. #4831

  • Corregir el tipo de template_folder para que acepte pathlib.Path. #4892

  • Añadir la opción --debug al comando flask run. #4777

Versión 2.2.2

Lanzado el 08-08-2022

  • Actualizar la dependencia de Werkzeug a >= 2.2.2. Esto incluye correcciones relacionadas con el nuevo enrutador más rápido, el análisis de encabezados y el servidor de desarrollo. #4754

  • Establecer el valor predeterminado de app.env en "production". Este atributo sigue estando obsoleto. #4740

Versión 2.2.1

Lanzado el 03-08-2022

  • Al configurar o acceder a json_encoder o json_decoder se muestra una advertencia de obsolescencia. #4732

Versión 2.2.0

Lanzado el 01-08-2022

  • Eliminar código obsoleto. #4667

    • Se han eliminado los antiguos nombres de algunos parámetros de send_file. download_name sustituye a attachment_filename, max_age sustituye a cache_timeout, y etag sustituye a add_etags. Además, path sustituye a filename en send_from_directory.

    • Se elimina la propiedad RequestContext.g que devuelve AppContext.g.

  • Actualizar la dependencia de Werkzeug a >= 2.2.

  • Los contextos de la aplicación y de la petición se gestionan utilizando directamente las varas de contexto de Python en lugar de la LocalStack de Werkzeug. Esto debería dar lugar a un mejor rendimiento y uso de la memoria. #4682

    • Mantenedores de extensiones, tened en cuenta que _app_ctx_stack.top y _request_ctx_stack.top están obsoletos. Almacena los datos en g en su lugar utilizando un prefijo único, como g._extension_name_attr.

  • La variable de entorno FLASK_ENV y el atributo app.env están obsoletos, eliminando la distinción entre el modo de desarrollo y el modo de depuración. El modo de depuración debe controlarse directamente usando la opción --debug o app.run(debug=True). #4714

  • Algunos atributos que actuaban como proxy de claves de configuración en app están obsoletos: session_cookie_name, send_file_max_age_default, use_x_sendfile, propagate_exceptions y templates_auto_reload. En su lugar, utiliza las claves de configuración correspondientes. #4716

  • Añade nuevos puntos de personalización al objeto de aplicación Flask para muchos comportamientos anteriormente globales.

    • flask.url_for llamará a app.url_for. #4568

    • flask.abort llamará a app.aborter. Se puede utilizar Flask.aborter_class y Flask.make_aborter para personalizar este abortador. #4567

    • flask.redirect llamará a app.redirect. #4569

    • flask.json es una instancia de JSONProvider. Se puede establecer un proveedor diferente para usar otra librería JSON. flask.jsonify llamará a app.json.response; las demás funciones en flask.json llamarán a las funciones correspondientes en app.json. #4692

  • La configuración de JSON se ha trasladado a atributos del proveedor predeterminado app.json. JSON_AS_ASCII, JSON_SORT_KEYS, JSONIFY_MIMETYPE y JSONIFY_PRETTYPRINT_REGULAR están obsoletos. #4692

  • Establecer clases personalizadas json_encoder y json_decoder en la aplicación o en un blueprint, así como las clases correspondientes json.JSONEncoder y JSONDecoder, está obsoleto. El comportamiento de JSON ahora puede sobrescribirse usando la interfaz del proveedor app.json. #4692

  • json.htmlsafe_dumps y json.htmlsafe_dump están obsoletos; la función ahora está integrada en Jinja. #4692

  • Refactorizar register_error_handler para consolidar la comprobación de errores. Reescribir algunos mensajes de error para que sean más consistentes. #4559

  • El uso de decoradores y funciones de Blueprint destinados a la configuración después de registrar el blueprint mostrará una advertencia. En la próxima versión, esto se convertirá en un error al igual que los métodos de configuración de la aplicación. #4571

  • before_first_request está obsoleto. En su lugar, ejecute el código de configuración al crear la aplicación. #4605

  • Se ha añadido el atributo de clase View.init_every_request. Si una subclase de la vista lo establece en False, la vista no creará una nueva instancia en cada petición. #2520.

  • Un grupo de Click flask.cli.FlaskGroup puede anidarse como subcomando en una CLI personalizada. #3263

  • Se añaden las opciones --app y --debug al CLI de flask, en lugar de requerir que se establezcan mediante variables de entorno. #2836

  • Añadir la opción --env-file al CLI de flask. Esto permite especificar un archivo dotenv para cargar además de .env y .flaskenv. #3108

  • Ya no es necesario decorar los comandos CLI personalizados en app.cli o blueprint.cli con @with_appcontext, un contexto de aplicación ya estará activo en ese punto. #2410

  • SessionInterface.get_expiration_time utiliza un valor que tiene en cuenta la zona horaria. #4645

  • Las funciones de vista pueden devolver generadores directamente en lugar de envolverlos en una Response. #4629

  • Añade las funciones stream_template y stream_template_string para representar una plantilla como un flujo de piezas. #4629

  • Una nueva implementación de la preservación del contexto durante la depuración y las pruebas. #4666

    • request, g y otras localizaciones de contexto apuntan a los datos correctos cuando se ejecuta código en la consola del depurador interactivo. #2836

    • Las funciones de desmontaje se ejecutan siempre al final de la solicitud, incluso si el contexto se conserva. También se ejecutan después de que el contexto preservado se desprenda.

    • stream_with_context preserva el contexto por separado de un bloque with client. Se limpiará cuando se llame a response.get_data() o response.close().

  • Permitir la devolución de una lista desde una función de vista, para convertirla en una respuesta JSON como lo es un dict. #4672

  • Al realizar comprobaciones de tipos, se permite que las funciones de vista devuelvan TypedDict. #4695

  • Se eliminan las opciones --eager-loading/--lazy-loading del comando flask run. La aplicación siempre se carga de forma eager la primera vez y luego de forma lazy en el reloader. El reloader siempre imprime los errores de inmediato pero continúa sirviendo. Se elimina el middleware interno DispatchingApp usado por la implementación anterior. #4715

Versión 2.1.3

Lanzado el 13-07-2022

  • Importaciones inline opcionales que sólo se utilizan para ciertos comandos de la CLI. #4606

  • Relaja la anotación de tipo para las funciones after_request. #4600

  • instance_path para paquetes de espacio de nombres utiliza la ruta más cercana al submódulo importado. #4610

  • Mensaje de error más claro cuando se usan render_template y render_template_string fuera del contexto de una aplicación. #4693

Versión 2.1.2

Lanzamiento 2022-04-28

  • Corrige la anotación de tipo para json.loads, acepta str o bytes. #4519

  • Las opciones --cert y --key en flask run pueden darse en cualquier orden. #4459

Versión 2.1.1

Lanzamiento 2022-03-30

  • Establece la versión mínima requerida de importlib_metadata a 3.6.0, que es necesaria en Python < 3.10. #4502

Versión 2.1.0

Lanzamiento 2022-03-28

  • Deja de ser compatible con Python 3.6. #4335

  • Actualizar la dependencia de Click a >= 8.0. #4008

  • Elimina el código previamente obsoleto. #4337

    • La CLI no pasa script_info a las funciones de fábrica de la aplicación.

    • config.from_json se sustituye por config.from_file(name, load=json.load).

    • Las funciones json ya no toman el parámetro encoding.

    • Se ha eliminado safe_join, utilice en su lugar werkzeug.utils.safe_join.

    • Se ha eliminado total_seconds, utilice timedelta.total_seconds en su lugar.

    • No se puede registrar el mismo plano con el mismo nombre. Utiliza name= cuando te registres para especificar un nombre único.

    • Se elimina el parámetro as_tuple del cliente de prueba. Utiliza response.request.environ en su lugar. #4417

  • Algunos parámetros de send_file y send_from_directory fueron renombrados en la 2.0. El periodo de depreciación de los nombres antiguos se extiende hasta la 2.2. Asegúrese de probar con las advertencias de depreciación visibles.

    • attachment_filename es renombrado a download_name.

    • cache_timeout es renombrado a max_age.

    • add_etags es renombrado a etag.

    • filename es renombrado a path.

  • La propiedad RequestContext.g está obsoleta. Utilice g directamente o AppContext.g en su lugar. #3898

  • copy_current_request_context puede decorar funciones async. #4303

  • El CLI utiliza importlib.metadata en lugar de pkg_resources para cargar los puntos de entrada de los comandos. #4419

  • Anular FlaskClient.open no causará un error en la redirección. #3396

  • Añade una opción --exclude-patterns al comando CLI flask run para especificar patrones que serán ignorados por el recargador. #4188

  • Cuando se utiliza la carga perezosa (por defecto con el depurador), el contexto Click del comando flask run permanece disponible en el hilo del cargador. #4460

  • La eliminación de la cookie de sesión utiliza la bandera httponly. #4485

  • Relajar la tipificación de errorhandler para permitir al usuario utilizar tipos más precisos y decorar la misma función varias veces. #4095, 4295, 4297

  • Corregir la tipificación de los métodos __exit__ para mejorar la compatibilidad con ExitStack. #4474

  • Desde Werkzeug, para las respuestas de redirección la URL de la cabecera Location seguirá siendo relativa, y excluirá el esquema y el dominio, por defecto. #4496

  • Añade Config.from_prefixed_env() para cargar los valores de configuración de las variables de entorno que comienzan con FLASK_ u otro prefijo. Esto analiza los valores como JSON por defecto, y permite establecer claves en dictos anidados. #4479

Versión 2.0.3

Publicado el 2022-02-14

  • El parámetro as_tuple del cliente de pruebas está obsoleto y se eliminará en Werkzeug 2.1. Ahora también está obsoleto en Flask, que se eliminará en Flask 2.1, aunque seguirá siendo compatible con ambos en 2.0.x. Utiliza response.request.environ en su lugar. #4341

  • Corrige la anotación de tipo para el decorador errorhandler. #4295

  • Revierte un cambio en la CLI que provocaba que se ocultaran los tracebacks de ImportError al importar la aplicación. #4307

  • app.json_encoder y json_decoder sólo se pasan a dumps y loads si tienen un comportamiento personalizado. Esto mejora el rendimiento, principalmente en PyPy. #4349

  • Mensaje de error más claro cuando se utiliza after_this_request fuera de un contexto de solicitud. #4333

Versión 2.0.2

Publicado el 2021-10-04

  • Corrige la anotación de tipo para los métodos teardown_*. #4093

  • Corrige la anotación de tipo para los decoradores before_request y before_app_request. #4104

  • Solucionado el problema por el que la escritura requiere que los decoradores globales de las plantillas acepten funciones sin argumentos. #4098

  • Soporta las instancias View y MethodView con manejadores asíncronos. #4112

  • Mejora la tipificación del decorador app.errorhandler. #4095

  • Corrige el registro de un blueprint dos veces con nombres diferentes. #4124

  • Corrige el tipo de static_folder para aceptar pathlib.Path. #4150

  • jsonify maneja decimal.Decimal codificando a str. #4157

  • Manejar correctamente el levantamiento de errores diferidos en la carga retardada de la CLI. #4096

  • El cargador CLI maneja **kwargs en una función create_app. #4170

  • Corregido el orden de before_request y otros callbacks que se activan antes de que vuelva la vista. Se llaman desde la aplicación hasta el blueprint anidado más cercano. #4229

Versión 2.0.1

Publicado el 2021-05-21

  • Vuelve a añadir el parámetro filename en send_from_directory. El parámetro filename ha sido renombrado a path, el antiguo nombre está obsoleto. #4019

  • Marcar los nombres de nivel superior como exportados para que la comprobación de tipo entienda las importaciones en los proyectos de usuario. #4024

  • Corrige la anotación de tipo para g e informar a mypy de que es un objeto de espacio de nombres que tiene atributos arbitrarios. #4020

  • Corrige algunos tipos que no estaban disponibles en Python 3.6.0. #4040

  • Mejora la tipificación de send_file, send_from_directory y get_send_file_max_age. #4044, #4026

  • Muestra un error cuando un nombre de blueprint contiene un punto. El . tiene un significado especial, se utiliza para separar los nombres de los blueprints (anidados) y el nombre del punto final. #4041

  • Combina prefijos de URL al anidar blueprints creados con un valor url_prefix. #4037

  • Revertir un cambio en el orden en que se realizaba la coincidencia de URLs. La URL vuelve a coincidir después de cargar la sesión, por lo que la sesión está disponible en los conversores de URL personalizados. #4053

  • Vuelve a añadir el obsoleto Config.from_json, que fue eliminado accidentalmente antes. #4078

  • Mejora la tipificación de algunas funciones que utilizan Callable en sus firmas de tipo, centrándose en las fábricas de decoradores. #4060

  • Los blueprints anidados se registran con su nombre punteado. Esto permite anidar diferentes blueprints con el mismo nombre en diferentes lugares. #4069

  • register_blueprint toma una opción name para cambiar el nombre (pre-punteado) con el que se registra el blueprint. Esto permite registrar el mismo blueprint varias veces con nombres únicos para url_for. Registrar el mismo blueprint con el mismo nombre varias veces está obsoleto. #1091

  • Mejora la tipificación de stream_with_context. #4052

Versión 2.0.0

Lanzado el 11-05-2021

  • Deja de ser compatible con Python 2 y 3.5.

  • Aumenta las versiones mínimas de otros proyectos de Pallets: Werkzeug >= 2, Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8. Asegúrese de comprobar los registros de cambios de cada proyecto. Para una mejor compatibilidad con otras aplicaciones (por ejemplo, Celery) que todavía requieren Click 7, todavía no hay dependencia dura de Click 8, pero el uso de Click 7 activará un DeprecationWarning y Flask 2.1 dependerá de Click 8.

  • El soporte de JSON ya no utiliza simplejson. Para utilizar otro módulo JSON, anule app.json_encoder y json_decoder. #3555

  • La opción encoding de las funciones JSON está obsoleta. #3562

  • Pasa script_info a las funciones de fábrica de la aplicación está obsoleto. Esto no era portable fuera del comando flask. Usa click.get_current_context().obj si es necesario. #3552

  • La CLI muestra mejores mensajes de error cuando la aplicación no se carga al buscar comandos. #2741

  • Se añade SessionInterface.get_cookie_name para permitir establecer dinámicamente el nombre de la cookie de sesión. #3369

  • Se añade Config.from_file para cargar la configuración usando cargadores de archivos arbitrarios, como toml.load o json.load. Config.from_json queda obsoleto en favor de esta nueva función. #3398

  • El comando flask run sólo aplazará los errores en la recarga. Los errores que se produzcan durante la llamada inicial harán que el servidor salga con el rastreo inmediatamente. #3431

  • send_file genera un ValueError cuando se le pasa un objeto io en modo texto. Anteriormente, respondía con 200 OK y un archivo vacío. #3358

  • Al utilizar certificados ad-hoc, compruebe la biblioteca de criptografía en lugar de PyOpenSSL. #3492

  • Al especificar una función de fábrica con FLASK_APP, se puede pasar el argumento de la palabra clave. #3553

  • Al cargar un archivo .env o .flaskenv, el directorio de trabajo actual ya no se cambia a la ubicación del archivo. #3560

  • Cuando se devuelve una tupla (response, headers) desde una vista, las cabeceras reemplazan en lugar de extender las cabeceras existentes en la respuesta. Por ejemplo, esto permite establecer el Content-Type para jsonify(). Utiliza response.headers.extend() si deseas extenderla. #3628

  • La clase Scaffold proporciona una API común para las clases Flask y Blueprint. La información de Blueprint se almacena en atributos al igual que Flask, en lugar de funciones lambda opacas. Esto pretende mejorar la consistencia y la capacidad de mantenimiento. #3215

  • Incluye las opciones samesite y secure al eliminar la cookie de sesión. #3726

  • Soporta pasar un pathlib.Path a static_folder. #3579

  • send_file y send_from_directory son envolturas alrededor de las implementaciones en werkzeug.utils. #3828

  • Algunos parámetros de send_file han sido renombrados, los antiguos nombres están obsoletos. El nombre de attachment_filename ha cambiado a download_name. El nombre de cache_timeout ha cambiado a max_age. add_etags pasa a llamarse etag. #3828, 3883

  • send_file pasa download_name incluso si as_attachment=False utilizando Content-Disposition: inline. #3828

  • send_file establece conditional=True y max_age=None por defecto. Cache-Control se establece como no-cache si max_age no se establece, en caso contrario public. Esto indica a los navegadores que validen las peticiones condicionales en lugar de utilizar una caché temporizada. #3828

  • helpers.safe_join está obsoleto. Utiliza werkzeug.utils.safe_join en su lugar. #3828

  • El contexto de la solicitud hace la coincidencia de la ruta antes de abrir la sesión. Esto podría permitir que una interfaz de sesión cambie de comportamiento basándose en request.endpoint. #3776

  • Utiliza la implementación de Jinja del filtro |tojson. #3881

  • Añade decoradores de ruta para métodos HTTP comunes. Por ejemplo, @app.post("/login") es un atajo para @app.route("/login", methods=["POST"]). #3907

  • Soporta vistas asíncronas, manejadores de error, antes y después de la solicitud, y funciones de desmontaje. #3412

  • Soporta el anidamiento de blueprints. #593, 1548, #3923

  • Establece la codificación por defecto en «UTF-8» al cargar los archivos .env y .flaskenv para permitir el uso de caracteres no ASCII. #3931

  • flask shell configura el completamiento de pestañas e historial como el shell python por defecto si readline está instalado. #3941

  • helpers.total_seconds() está obsoleto. Utilice timedelta.total_seconds() en su lugar. #3962

  • Añade una pista de tipo #3973.

Versión 1.1.4

Publicado el 2021-05-13

  • Actualiza static_folder para utilizar _compat.fspath en lugar de os.fspath para seguir soportando Python < 3.6 #4050

Versión 1.1.3

Publicado el 2021-05-13

  • Establece las versiones máximas de Werkzeug, Jinja, Click y ItsDangerous. #4043

  • Vuelve a añadir soporte para pasar un pathlib.Path para static_folder. #3579

Versión 1.1.2

Lanzamiento 2020-04-03

  • Soluciona un problema al ejecutar el comando flask con un depurador externo en Windows. #3297

  • La ruta estática no captará todas las URLs si el argumento Flask static_folder termina con una barra. #3452

Versión 1.1.1

Lanzamiento 2019-07-08

  • Se ha vuelto a añadir la bandera flask.json_available por compatibilidad con algunas extensiones. Se emitirá una advertencia de desaprobación cuando se utilice, y se eliminará en la versión 2.0.0. #3288

Versión 1.1.0

Lanzamiento 2019-07-04

  • Aumenta la versión mínima de la herramienta a >= 0.15.

  • Deja de ser compatible con Python 3.4.

  • A los manejadores de errores para InternalServerError o 500 siempre se les pasará una instancia de InternalServerError. Si son invocados debido a una excepción no manejada, esa excepción original está ahora disponible como e.original_exception en lugar de ser pasada directamente al manejador. Lo mismo ocurre si el manejador es para la base HTTPException. Esto hace que el comportamiento del manejador de errores sea más consistente. #3266

    • Flask.finalize_request se llama para todas las excepciones no controladas, incluso si no existe un manejador de errores 500.

  • Flask.logger toma el mismo nombre que Flask.name (el valor pasado como Flask(import_name)). Esto revierte el comportamiento de la versión 1.0 de siempre registrar en "flask.app", para permitir soportar múltiples aplicaciones en el mismo proceso. Se mostrará una advertencia si se detecta una configuración antigua que necesita ser movida. #2866

  • RequestContext.copy incluye el objeto de sesión actual en la copia del contexto de la solicitud. Esto evita que session apunte a un objeto desactualizado. #2935

  • Utilizando el RequestContext incorporado, los caracteres Unicode no imprimibles en la cabecera Host darán lugar a una respuesta HTTP 400 y no HTTP 500 como anteriormente. #2994

  • send_file admite objetos PathLike como se describe en PEP 519, para soportar pathlib en Python 3. #3059

  • send_file admite contenido parcial de BytesIO. #2957

  • open_resource acepta el modo de archivo «rt». Esto sigue funcionando igual que «r». #3163

  • El conjunto de atributos MethodView.methods definido en una clase base es utilizado por las subclases. #3138

  • Flask.jinja_options es un dict en lugar de un ImmutableDict para permitir una configuración más sencilla. Los cambios aún deben realizarse antes de crear el entorno. #3190

  • El JSONMixin de Flask para las envolturas de solicitud y respuesta fue trasladado a Werkzeug. Utiliza la versión de Werkzeug con soporte específico para Flask. Esto eleva la dependencia de Werkzeug a >= 0.15. #3125

  • El entry point del comando flask se ha simplificado para aprovechar el mejor soporte del recargador de Werkzeug 0.15. Esto eleva la dependencia de Werkzeug a >= 0.15. #3022

  • Soporta static_url_path que termina con una barra diagonal. #3134

  • Soporta static_folder vacía sin necesidad de establecer también una static_url_path vacía. #3124

  • jsonify admite objetos dataclass. #3195

  • Se permite personalizar la Flask.url_map_class utilizada para el enrutamiento. #3069

  • El puerto del servidor de desarrollo puede establecerse en 0, lo que indica al sistema operativo que elija un puerto disponible. #2926

  • El valor de retorno de cli.load_dotenv es más coherente con la documentación. Devolverá False si python-dotenv no está instalado o si la ruta proporcionada no es un archivo. #2937

  • El soporte de señalización tiene un stub para el método connect_via cuando la biblioteca Blinker no está instalada. #3208

  • Añade una opción --extra-files al comando CLI flask run para especificar archivos extra que activarán el recargador al cambiar. #2897

  • Permite devolver un diccionario desde una función de vista. Al igual que devolver una cadena producirá una respuesta text/html, devolver un dict llamará a jsonify para producir una respuesta application/json. #3111

  • Los blueprints tienen un grupo de clics cli como app.cli. Los comandos CLI registrados con un blueprint estarán disponibles como grupo bajo el comando flask. #1357.

  • Cuando se utiliza el cliente de prueba como gestor de contextos (with client:), todos los contextos de solicitud conservados se eliminan al salir del bloque, asegurando que los contextos anidados se limpien correctamente. #3157

  • Muestra un mejor mensaje de error cuando el tipo de retorno de la vista no es compatible. #3214

  • flask.testing.make_test_environ_builder() ha quedado obsoleta en favor de una nueva clase flask.testing.EnvironBuilder. #3232

  • El comando flask run ya no falla si Python no está construido con soporte SSL. El uso de la opción --cert mostrará un mensaje de error apropiado. #3211

  • La coincidencia de URLs se produce ahora después de que el contexto de solicitud sea empujado, en lugar de cuando se crea. Esto permite que los convertidores de URL personalizados accedan a la aplicación y a los contextos de solicitud, como por ejemplo para consultar una base de datos para un id. #3088

Versión 1.0.4

Lanzamiento 2019-07-04

  • La información de la clave para BadRequestKeyError ya no se borra fuera del modo de depuración, por lo que los gestores de errores pueden seguir accediendo a ella. Esto requiere la actualización a Werkzeug 0.15.5. #3249

  • La url send_file entrecomilla los caracteres «:» y «/» para hacer más compatible el nombre de archivo UTF-8 en algunos navegadores. #3074

  • Correcciones para los cargadores de importación según PEP 451 y para pytest 5.x. #3275

  • Muestra mensaje sobre dotenv en stderr en lugar de stdout. #3285

Versión 1.0.3

Lanzamiento 2019-05-17

  • send_file codifica los nombres de archivo como ASCII en lugar de Latin-1 (ISO-8859-1). Esto corrige la compatibilidad con Gunicorn, que es más estricto con las codificaciones de encabezados que PEP 3333. #2766

  • Permitir que las CLIs personalizadas que utilizan FlaskGroup establezcan la bandera de depuración sin que se sobrescriba siempre en función de las variables de entorno. #2765

  • flask --version da como resultado la versión de Werkzeug y simplifica la versión de Python. #2825

  • send_file maneja un attachment_filename que es una cadena nativa de Python 2 (bytes) con bytes codificados en UTF-8. #2933

  • Un manejador de errores registrado para HTTPException no manejará RoutingException, que se utiliza internamente durante el enrutamiento. Esto corrige el comportamiento inesperado que se había introducido en la versión 1.0. #2986

  • Pasa el argumento json a app.test_client no hace push/pop de un contexto de aplicación extra. #2900

Versión 1.0.2

Publicado el 2018-05-02

  • Corrige más problemas de retrocompatibilidad con la fusión de barras entre un prefijo de blueprint y una ruta. #2748

  • Corrige el error del comando flask routes cuando no hay rutas. #2751

Versión 1.0.1

Publicado 2018-04-29

  • Corrige el registro de parciales (sin __name__) como funciones de vista. #2730

  • No se tratan las listas devueltas por las funciones de vista igual que las tuplas. Sólo las tuplas se interpretan como datos de respuesta. #2736

  • Se han fusionado las barras inclinadas adicionales entre el url_prefix de un blueprint y la URL de una ruta. Esto corrige algunos problemas de compatibilidad con el cambio en 1.0. #2731, #2742

  • Sólo se atrapan los errores BadRequestKeyError en modo de depuración, no todos los errores BadRequest. Esto permite que abort(400) siga funcionando como se espera. #2735

  • La variable de entorno FLASK_SKIP_DOTENV puede establecerse en 1 para omitir la carga automática de archivos dotenv. #2722

Versión 1.0

Publicado 2018-04-26

  • Python 2.6 y 3.3 ya no son compatibles.

  • Aumenta las versiones mínimas de las dependencias a las últimas versiones estables: Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. #2586

  • Se omite app.run cuando una aplicación Flask se ejecuta desde la línea de comandos. Esto evita algunos comportamientos que resultaban confusos de depurar.

  • Se cambia el valor predeterminado de JSONIFY_PRETTYPRINT_REGULAR a False. ~json.jsonify devuelve un formato compacto por defecto y un formato con sangría en modo de depuración. #2193

  • Flask.__init__ acepta el argumento host_matching y lo establece en Flask.url_map. #1559

  • Flask.__init__ acepta el argumento static_host y lo pasa como argumento host al definir la ruta estática. #1559

  • send_file admite Unicode en attachment_filename. #2223

  • Se pasa el argumento _scheme de url_for a Flask.handle_url_build_error. #2017

  • Flask.add_url_rule acepta el argumento provide_automatic_options para desactivar la adición del método OPTIONS. #1489

  • Las subclases de MethodView heredan los manejadores de métodos de las clases base. #1936

  • Los errores causados al abrir la sesión al inicio de la solicitud son manejados por los manejadores de errores de la aplicación. #2254

  • Los blueprints ahora tienen los atributos Blueprint.json_encoder y Blueprint.json_decoder para sobrescribir el codificador y decodificador de la aplicación. #1898

  • Flask.make_response genera TypeError en lugar de ValueError para tipos de respuesta incorrectos. Los mensajes de error se han mejorado para describir por qué el tipo no es válido. #2256

  • Añade el comando CLI routes para dar salida a las rutas registradas en la aplicación. #2259

  • Mostrar una advertencia cuando el dominio de la cookie de sesión es un nombre de host desnudo o una dirección IP, ya que estos pueden no comportarse correctamente en algunos navegadores, como Chrome. #2282

  • Permitir la dirección IP como dominio exacto de la cookie de sesión. #2282

  • SESSION_COOKIE_DOMAIN se establece si se detecta a través de SERVER_NAME. #2282

  • Detecta automáticamente la fábrica de aplicaciones sin argumentos llamada create_app o make_app de FLASK_APP. #2297

  • Las funciones fábrica no están obligadas a recibir un parámetro script_info para funcionar con el comando flask. Si reciben un solo parámetro o un parámetro llamado script_info, se pasará el objeto ScriptInfo. #2319

  • FLASK_APP puede establecerse en una fábrica de aplicaciones, con argumentos si es necesario, por ejemplo FLASK_APP=myproject.app:create_app('dev'). #2326

  • FLASK_APP puede apuntar a paquetes locales que no están instalados en modo editable, aunque sigue siendo preferible pip install -e. #2414

  • El atributo de clase View.provide_automatic_options se establece en View.as_view, para ser detectado por Flask.add_url_rule. #2316

  • El manejo de errores probará los manejadores registrados para blueprint, code, app, code, blueprint, exception, app, exception. #2314

  • Se añade Cookie a la cabecera Vary de la respuesta si se accede a la sesión durante la solicitud (y no se borra). #2288

  • Flask.test_request_context acepta los argumentos subdomain y url_scheme para usarlos al construir la URL base. #1621

  • Se establece APPLICATION_ROOT en '/' por defecto. Esto ya era el valor predeterminado implícito cuando se configuraba como None.

  • TRAP_BAD_REQUEST_ERRORS está habilitado por defecto en modo de depuración. BadRequestKeyError muestra un mensaje con la clave incorrecta en modo de depuración en lugar del mensaje genérico de solicitud incorrecta. #2348

  • Se permite registrar nuevas etiquetas con TaggedJSONSerializer para admitir el almacenamiento de otros tipos en la cookie de sesión. #2352

  • Solo se abre la sesión si la solicitud aún no se ha añadido a la pila de contexto. Esto permite que los generadores de stream_with_context accedan a la misma sesión que utiliza la vista contenedora. #2354

  • Añade el argumento de la palabra clave json para los métodos de solicitud del cliente de prueba. Esto volcará el objeto dado como JSON y establecerá el tipo de contenido apropiado. #2358

  • Se extrae el manejo de JSON a un mixin aplicado tanto a las clases Request como Response. Esto añade los métodos Response.is_json y Response.get_json a la respuesta, facilitando mucho las pruebas de respuestas JSON. #2358

  • Eliminado el almacenamiento en caché de los manejadores de error porque provocaba resultados inesperados en algunas jerarquías de herencia de excepciones. Registre los manejadores explícitamente para cada excepción si quiere evitar atravesar el MRO. #2362

  • Corrige la codificación JSON incorrecta de las fechas conscientes, no UTC. #2374

  • La recarga automática de plantillas respetará el modo de depuración incluso si Flask.jinja_env ya había sido accedido. #2373

  • Eliminado el siguiente código obsoleto. #2385

    • flask.ext - importar extensiones directamente por su nombre en lugar de a través del espacio de nombres flask.ext. Por ejemplo, import flask.ext.sqlalchemy se convierte en import flask_sqlalchemy.

    • Flask.init_jinja_globals: utiliza Flask.create_jinja_environment para extenderlo en su lugar.

    • Flask.error_handlers: se rastrea mediante Flask.error_handler_spec; utiliza Flask.errorhandler para registrar manejadores.

    • Flask.request_globals_class: utiliza Flask.app_ctx_globals_class en su lugar.

    • Flask.static_path: utiliza Flask.static_url_path en su lugar.

    • Request.module: utiliza Request.blueprint en su lugar.

  • La propiedad Request.json ya no está obsoleta. #1421

  • Se admite pasar un EnvironBuilder o un dict a test_client.open. #2412

  • El comando flask y Flask.run cargarán variables de entorno desde los archivos .env y .flaskenv si python-dotenv está instalado. #2416

  • Al pasar una URL completa al cliente de pruebas, se utiliza el esquema de la URL en lugar de PREFERRED_URL_SCHEME. #2430

  • Flask.logger ha sido simplificado. Se eliminaron las configuraciones LOGGER_NAME y LOGGER_HANDLER_POLICY. El logger siempre se llama flask.app. El nivel solo se establece en el primer acceso; no se verifica Flask.debug cada vez. Solo se utiliza un formato, no diferentes según Flask.debug. No se eliminan manejadores y se añade un manejador únicamente si no hay manejadores ya configurados. #2436

  • Los nombres de las funciones de la vista Blueprint no pueden contener puntos. #2450

  • Corregido un ValueError causado por peticiones de Range no válidas en algunos casos. #2526

  • El servidor de desarrollo utiliza hilos por defecto. #2529

  • Cargar archivos de configuración con silent=True ignorará los errores ENOTDIR. #2581

  • Pasa las opciones --cert y --key a flask run para ejecutar el servidor de desarrollo sobre HTTPS. #2606

  • Se añade SESSION_COOKIE_SAMESITE para controlar el atributo SameSite de la cookie de sesión. #2607

  • Se añade Flask.test_cli_runner para crear un runner de Click que pueda invocar comandos del CLI de Flask para pruebas. #2636

  • La coincidencia de subdominios está deshabilitada por defecto y establecer SERVER_NAME no la habilita implícitamente. Puede activarse pasando subdomain_matching=True al constructor de Flask. #2635

  • Se elimina una sola barra al final del plano url_prefix cuando se registra en la aplicación. #2629

  • Request.get_json no almacena en caché el resultado si el análisis falla cuando silent es verdadero. #2651

  • Request.get_json ya no acepta codificaciones arbitrarias. El JSON entrante debe estar codificado en UTF-8 según RFC 8259, aunque Flask detectará automáticamente UTF-8, UTF-16 o UTF-32. #2691

  • Se añadieron MAX_COOKIE_SIZE y Response.max_cookie_size para controlar cuándo Werkzeug advierte sobre cookies grandes que los navegadores podrían ignorar. #2693

  • Actualizado el tema de la documentación para que los documentos se vean mejor en ventanas pequeñas. #2709

  • Ha sido reescrita la documentación del tutorial y el proyecto de ejemplo para adoptar un enfoque más estructurado que ayude a los nuevos usuarios a evitar los errores más comunes. #2676

Versión 0.12.5

Lanzamiento 2020-02-10

  • Fijado Werkzeug a < 1.0.0. #3497

Versión 0.12.4

Publicado 2018-04-29

  • Reempaquetado de la versión 0.12.3 para solucionar un problema de diseño del paquete. #2728

Versión 0.12.3

Publicado 2018-04-26

  • Request.get_json ya no acepta codificaciones arbitrarias. El JSON entrante debe estar codificado en UTF-8 según RFC 8259, aunque Flask detectará automáticamente UTF-8, UTF-16 o UTF-32. #2692

  • Corrige una advertencia de Python sobre las importaciones cuando se utiliza python -m flask. #2666

  • Corrige un ValueError causado por peticiones de Range no válidas en algunos casos.

Versión 0.12.2

Lanzamiento 2017-05-16

  • Corrige un error en safe_join en Windows.

Versión 0.12.1

Lanzamiento 2017-03-31

  • Evita que flask run muestre una NoAppException cuando se produce un ImportError dentro del módulo de aplicación importado.

  • Corrige el comportamiento de codificación de app.config.from_pyfile para Python 3. #2118

  • Utiliza la configuración SERVER_NAME si está presente como valor por defecto para app.run. #2109, #2152

  • Llama a ctx.auto_pop con el objeto de excepción en lugar de None, en el caso de que una BaseException como KeyboardInterrupt sea lanzada en un manejador de peticiones.

Versión 0.12

Lanzamiento 2016-12-21, codename Punsch

  • El comando cli ahora responde a --versión.

  • Se ha eliminado la adivinación del tipo de letra y la generación de ETag para los objetos tipo archivo en send_file. #104, :pr`1849`

  • La conjetura sobre el tipo de archivo en send_file ahora falla de forma estrepitosa y no vuelve a pasar a application/octet-stream. #1988

  • Hace que flask.safe_join pueda unir múltiples rutas como os.path.join #1730

  • Revertir un cambio de comportamiento que hacía que el servidor de desarrollo se bloqueara en lugar de devolver un Error Interno del Servidor. #2006

  • Invocar correctamente los manejadores de respuesta tanto para el despacho de solicitudes regulares como para los manejadores de errores.

  • Desactiva la propagación del logger por defecto para el logger de la app.

  • Añade soporte para peticiones de rango en send_file.

  • app.test_client incluye un entorno predeterminado, que ahora se puede establecer directamente, en lugar de por client.get.

  • Corrige el fallo cuando se ejecuta bajo PyPy3. #1814

Versión 0.11.1

Lanzamiento 2016-06-07

  • Se ha corregido un error que impedía el funcionamiento de FLASK_APP=foobar/__init__.py. #1872

Versión 0.11

Lanzamiento 2016-05-29, codename Absinthe

  • Se añadió soporte para serializar arreglos de nivel superior en jsonify. Esto introduce un riesgo de seguridad en navegadores antiguos.

  • Añadida la señal before_render_template.

  • Se añadieron **kwargs a Flask.test_client para permitir pasar argumentos adicionales al constructor de Flask.test_client_class.

  • Se ha añadido la clave de configuración SESSION_REFRESH_EACH_REQUEST que controla el comportamiento de las cookies. Si se establece en True una sesión permanente se refrescará cada vez que se solicite y se extenderá su vida útil, si se establece en False sólo se modificará si la sesión se modifica realmente. Las sesiones no permanentes no se ven afectadas por esto y siempre expirarán si la ventana del navegador se cierra.

  • Flask soportará mimetypes JSON personalizados para los datos entrantes.

  • Se ha añadido soporte para devolver tuplas de la forma (response, headers) desde una función de vista.

  • Se añadió Config.from_json.

  • Se añadió Flask.config_class.

  • Se añadió Config.get_namespace.

  • Las plantillas ya no se recargan automáticamente fuera del modo de depuración. Esto se puede configurar con la nueva clave de configuración TEMPLATES_AUTO_RELOAD.

  • Se ha añadido una solución a una limitación del cargador de espacios de nombres de Python 3.3.

  • Se ha añadido soporte para rutas raíz explícitas cuando se utilizan los paquetes de espacio de nombres de Python 3.3.

  • Se añadieron flask y el módulo flask.cli para iniciar el servidor de depuración local mediante el sistema CLI de Click. Se recomienda esto en lugar del antiguo método flask.run(), ya que funciona de manera más rápida y confiable gracias a un diseño diferente, y también reemplaza a Flask-Script.

  • Los manejadores de error que coinciden con clases específicas ahora se comprueban primero, permitiendo así atrapar excepciones que son subclases de excepciones HTTP (en werkzeug.exceptions). Esto hace posible que el autor de una extensión cree excepciones que, por defecto, darán lugar al error HTTP que elija, pero que pueden ser capturadas con un manejador de errores personalizado si así lo desea.

  • Se añadió Config.from_mapping.

  • Flask ahora registrará por defecto incluso si la depuración está desactivada. El formato de registro está ahora codificado, pero el manejo del registro por defecto puede ser desactivado a través de la clave de configuración LOGGER_HANDLER_POLICY.

  • Se ha eliminado la funcionalidad del módulo obsoleto.

  • Se ha añadido la bandera de configuración EXPLAIN_TEMPLATE_LOADING que, cuando se activa, indica a Flask que explique cómo localiza las plantillas. Esto debería ayudar a los usuarios a depurar cuando se cargan las plantillas equivocadas.

  • Aplicar el manejo de los planos en el orden en que fueron registrados para la carga de la plantilla.

  • Porteada la suite de tests a py.test.

  • Se ha eliminado request.json en favor de request.get_json().

  • Añade definiciones de separadores «bonitos» y «comprimidos» en el método jsonify(). Reduce el tamaño de la respuesta JSON cuando JSONIFY_PRETTYPRINT_REGULAR=False eliminando los espacios en blanco innecesarios incluidos por defecto después de los separadores.

  • Las respuestas JSON ahora terminan con un carácter de nueva línea, ya que es una convención que los archivos de texto UNIX terminen con una nueva línea y algunos clientes no funcionan correctamente cuando falta esta nueva línea. #1262

  • El método OPTIONS proporcionado automáticamente está ahora correctamente desactivado si el usuario registró una regla de anulación con la versión minúscula options. #1288

  • flask.json.jsonify ahora soporta el tipo datetime.date. #1326

  • No se filtra la información de las excepciones ya capturadas a los manejadores de desmontaje de contexto. #1393

  • Permitir subclases de entorno Jinja personalizadas. #1422

  • Actualización de las directrices de desarrollo de la extensión.

  • flask.g tiene ahora los métodos pop() y setdefault.

  • Activa el autoescape para flask.templating.render_template_string por defecto. #1515

  • flask.ext está ahora obsoleto. #1484

  • send_from_directory ahora lanza BadRequest si el nombre del archivo no es válido en el SO del servidor. #1763

  • Añadida la variable de configuración JSONIFY_MIMETYPE. #1728

  • Las excepciones durante el manejo del desmontaje ya no dejarán que los contextos de aplicación malos se queden por ahí.

  • Corregido el caso de prueba roto test_appcontext_signals().

  • Se lanza un AttributeError en helpers.find_package con un mensaje útil que explica por qué se produce cuando se utiliza un hook de importación PEP 302 sin un método is_package().

  • Se ha corregido un problema que provocaba que las excepciones que se producían antes de entrar en un contexto de solicitud o de aplicación se pasaran a los gestores de desmontaje.

  • Se ha corregido un problema por el que los parámetros de consulta se eliminaban de las solicitudes en el cliente de prueba cuando se solicitaban URLs absolutas.

  • Convirtió a @before_first_request en un decorador como se pretendía.

  • Se ha corregido un error de etiquetado al enviar un flujo de archivos con un nombre.

  • Se ha corregido que send_from_directory no se expande a la ruta raíz de la aplicación correctamente.

  • Se ha cambiado la lógica de los manejadores de la primera solicitud para que se voltee la bandera después de la invocación. Esto permitirá algunos usos que son potencialmente peligrosos pero que probablemente deberían permitirse.

  • Se ha corregido el error de Python 3 cuando un manejador de app.url_build_error_handlers devuelve el BuildError.

Versión 0.10.1

Lanzamiento 2013-06-14

  • Se ha corregido un problema por el que |tojson no se citaba entre comillas simples, lo que hacía que el filtro no funcionara correctamente en los atributos HTML. Ahora es posible usar ese filtro en atributos con comillas simples. Esto debería facilitar el uso de ese filtro con angular.js.

  • Se ha añadido soporte para cadenas de bytes al sistema de sesiones. Esto rompió la compatibilidad con el caso común de personas que ponen datos binarios para la verificación de tokens en la sesión.

  • Se ha solucionado un problema por el que el registro del mismo método dos veces para el mismo punto final provocaba una excepción de forma incorrecta.

Versión 0.10

Lanzamiento 2013-06-13, codename Limoncello

  • Se ha cambiado el formato de serialización de cookies por defecto de pickle a JSON para limitar el impacto que un atacante puede hacer si se filtra la clave secreta.

  • Se han añadido métodos template_test además de la familia de métodos template_filter ya existente.

  • Se han añadido métodos template_global además de la familia de métodos template_filter ya existente.

  • Establece la cabecera content-length para x-sendfile.

  • El filtro tojson ahora no escapa a los bloques de script en los analizadores de HTML5.

  • tojson utilizado en las plantillas es ahora seguro por defecto. Esto se permitía debido al diferente comportamiento de escape.

  • Flask ahora lanzará un error si se intenta registrar una nueva función en un punto final ya utilizado.

  • Se ha añadido un módulo de envoltura alrededor de simplejson y se ha añadido la serialización por defecto de los objetos datetime. Esto permite una personalización mucho más fácil de cómo JSON es manejado por Flask o cualquier extensión de Flask.

  • Se ha eliminado el alias del módulo interno flask.session. Utiliza flask.sessions en su lugar para obtener el módulo de sesión. Esto no debe confundirse con flask.session el proxy de sesión.

  • Las plantillas ahora pueden ser renderizadas sin contexto de petición. El comportamiento es ligeramente diferente ya que los objetos request, session y g no estarán disponibles y los procesadores de contexto del blueprint no son llamados.

  • El objeto config está ahora disponible para la plantilla como un global real y no a través de un procesador de contexto que lo hace disponible incluso en las plantillas importadas por defecto.

  • Se ha añadido una opción para generar JSON no codificado en ascii, lo que debería dar lugar a que se transmitan menos bytes por la red. Está desactivada por defecto para no causar confusión con las bibliotecas existentes que podrían esperar que flask.json.dumps devolviera bytes por defecto.

  • flask.g se almacena ahora en el contexto de la aplicación en lugar del contexto de la solicitud.

  • flask.g ahora tiene un método get() para que no se produzcan errores en elementos no existentes.

  • flask.g ahora se puede utilizar con el operador in para ver lo que está definido y ahora es iterable y dará todos los atributos almacenados.

  • flask.Flask.request_globals_class fue renombrado a flask.Flask.app_ctx_globals_class que es un nombre mejor para lo que hace desde 0.10.

  • request, session y g ahora también se añaden como proxies al contexto de la plantilla, lo que hace que estén disponibles en las plantillas importadas. Sin embargo, hay que tener mucho cuidado con ellos, ya que su uso fuera de las macros puede provocar el almacenamiento en caché.

  • Flask ya no invocará los manejadores de error equivocados si se pasa una excepción de proxy.

  • Se ha añadido una solución para que las cookies de Chrome en localhost no funcionen como es debido con los nombres de dominio.

  • Se ha cambiado la lógica para elegir los valores predeterminados de las cookies de las sesiones para que funcionen mejor con Google Chrome.

  • Se ha añadido la señal message_flashed que simplifica las pruebas de flasheo.

  • Se ha añadido soporte para la copia de contextos de solicitud para trabajar mejor con los greenlets.

  • Eliminadas las subclases de excepción JSON HTTP personalizadas. Si dependías de ellas, puedes reintroducirlas tú mismo de forma trivial. Sin embargo, se desaconseja encarecidamente su uso, ya que la interfaz era defectuosa.

  • Los requisitos de Python han cambiado: ahora se requiere Python 2.6 o 2.7 para preparar el puerto de Python 3.3.

  • Se ha cambiado la forma en que se informa al sistema de desmontaje sobre las excepciones. Esto es ahora más fiable en caso de que algo maneje una excepción a mitad del proceso de manejo de errores.

  • La preservación del contexto de la solicitud en el modo de depuración ahora mantiene la información de la excepción, lo que significa que los manipuladores de desmontaje son capaces de distinguir los casos de error de los de éxito.

  • Añadida la variable de configuración JSONIFY_PRETTYPRINT_REGULAR.

  • Flask ahora ordena las claves JSON por defecto para no destrozar las cachés HTTP debido a diferentes semillas hash entre diferentes workers.

  • Añadidas las señales appcontext_pushed y appcontext_popped.

  • El método de ejecución incorporado ahora tiene en cuenta el SERVER_NAME al elegir el puerto por defecto para ejecutar.

  • Se ha añadido flask.request.get_json() en sustitución de la antigua propiedad flask.request.json.

Versión 0.9

Lanzamiento 2012-07-01, codename Campari

  • Request.on_json_loading_failed ahora devuelve una respuesta en formato JSON por defecto.

  • La función url_for ahora puede generar anclas para los enlaces generados.

  • La función url_for ahora también puede generar explícitamente reglas de URL específicas para un método HTTP determinado.

  • El registrador ahora sólo devuelve la configuración del registro de depuración si no se estableció explícitamente.

  • Desregistra una dependencia circular entre el entorno WSGI y el objeto request al cerrar la petición. Esto significa que el entorno werkzeug.request será None después de que la respuesta haya sido devuelta al servidor WSGI pero tiene la ventaja de que el recolector de basura no es necesario en CPython para derribar la petición a menos que el usuario haya creado dependencias circulares por sí mismo.

  • La sesión se almacena ahora después de las devoluciones de llamada, de modo que si la carga útil de la sesión se almacena en la sesión, todavía se puede modificar en una devolución de llamada posterior a la solicitud.

  • La clase Flask evitará importar el nombre de importación proporcionado si es posible (el primer parámetro requerido), para beneficiar a las herramientas que crean instancias de Flask de manera programática. La clase Flask recurrirá a la importación en sistemas con hooks de módulo personalizados, por ejemplo, Google App Engine, o cuando el nombre de importación esté dentro de un archivo zip (generalmente un egg) antes de Python 2.7.

  • Los blueprints ahora tienen un decorador para añadir filtros de plantilla personalizados a nivel de aplicación, Blueprint.app_template_filter.

  • Las clases Flask y Blueprint ahora tienen un método no decorador para añadir filtros de plantilla personalizados a nivel de aplicación: Flask.add_template_filter y Blueprint.add_app_template_filter.

  • La función get_flashed_messages ahora permite renderizar las categorías de mensajes «flashed» en bloques separados, mediante el argumento category_filter.

  • El método Flask.run ahora acepta None para los argumentos host y port, usando valores predeterminados cuando es None. Esto permite llamar a run usando valores de configuración, por ejemplo, app.run(app.config.get('MYHOST'), app.config.get('MYPORT')), con el comportamiento adecuado tanto si se proporciona un archivo de configuración como si no.

  • El método render_template ahora acepta tanto un iterable de nombres de plantilla como un único nombre de plantilla. Anteriormente, solo aceptaba un único nombre. En el caso de un iterable, se renderiza la primera plantilla que se encuentre.

  • Se añadió Flask.app_context, que funciona de manera muy similar al contexto de solicitud pero solo proporciona acceso a la aplicación actual. Esto también añade soporte para la generación de URL sin un contexto de solicitud activo.

  • Las funciones de vista ahora pueden devolver una tupla cuyo primer elemento sea una instancia de Response. Esto permite devolver jsonify(error="error msg"), 400 desde una función de vista.

  • Flask y Blueprint ahora proporcionan un hook get_send_file_max_age para que las subclases puedan sobrescribir el comportamiento de servir archivos estáticos desde Flask al usar Flask.send_static_file (utilizado por el manejador de archivos estáticos por defecto) y helpers.send_file. Este hook recibe un nombre de archivo, lo que permite, por ejemplo, cambiar los controles de caché según la extensión del archivo. La edad máxima por defecto para send_file y archivos estáticos puede configurarse mediante una nueva variable de configuración SEND_FILE_MAX_AGE_DEFAULT, que se utiliza en la implementación predeterminada de get_send_file_max_age.

  • Se ha corregido una suposición en la implementación de las sesiones que podía romper el parpadeo de los mensajes en las implementaciones de las sesiones que utilizan el almacenamiento externo.

  • Se ha cambiado el comportamiento de los valores de retorno de las funciones. Ya no son argumentos del objeto de respuesta, ahora tienen un significado definido.

  • Se añadió Flask.request_globals_class para permitir que se use una clase específica al crear la instancia g de cada solicitud.

  • Se ha añadido el atributo required_methods a las funciones de vista para forzar la adición de métodos al registrarse.

  • Se añadió flask.after_this_request.

  • Se añadieron flask.stream_with_context y la capacidad de apilar contextos múltiples veces sin producir comportamientos inesperados.

Versión 0.8.1

Lanzamiento 2012-07-01

  • Se ha corregido un problema con el módulo no documentado flask.session para que no funcione correctamente en Python 2.5. No debería usarse, pero causaba algunos problemas a los gestores de paquetes.

Versión 0.8

Lanzamiento 2011-09-29, codename Rakija

  • Refactorizado el soporte de sesiones en una interfaz de sesión para que la implementación de las sesiones pueda ser cambiada sin tener que sobreescribir la clase Flask.

  • Las cookies de sesión vacías ahora se eliminan correctamente de forma automática.

  • Las funciones de visualización ahora pueden optar por no recibir la implementación automática de OPTIONS.

  • Las excepciones HTTP y los errores de solicitud incorrecta ahora pueden ser atrapados para que se muestren normalmente en el rastreo.

  • Flask en modo de depuración ahora detecta algunos problemas comunes y trata de advertirte sobre ellos.

  • Flask en modo de depuración ahora se quejará con un error de aserción si una vista fue adjuntada después de que la primera solicitud fue manejada. Esto da una respuesta más temprana cuando los usuarios se olvidan de importar el código de la vista antes de tiempo.

  • Se ha añadido la posibilidad de registrar devoluciones de llamada que solo se activan una vez al comienzo de la primera solicitud con «Flask.before_first_request».

  • Los datos JSON mal formados provocarán ahora una excepción HTTP de solicitud incorrecta en lugar de un error de valor que normalmente daría lugar a un error 500 interno del servidor si no se gestiona. Este es un cambio incompatible con el pasado.

  • Las aplicaciones ahora no sólo tienen una ruta raíz donde se encuentran los recursos y los módulos, sino también una ruta de instancia que es el lugar designado para dejar los archivos que se modifican en tiempo de ejecución (cargas, etc.). Además, esto es conceptualmente sólo dependiendo de la instancia y fuera del control de versiones, por lo que es el lugar perfecto para poner los archivos de configuración, etc.

  • Se ha añadido la variable de configuración APPLICATION_ROOT.

  • Se implementó TestClient.session_transaction para modificar fácilmente las sesiones desde el entorno de pruebas.

  • Refactorizado el cliente de prueba internamente. La variable de configuración APPLICATION_ROOT así como SERVER_NAME son ahora utilizadas correctamente por el cliente de prueba como valores por defecto.

  • Se añadió View.decorators para soportar una decoración más sencilla de vistas enchufables (basadas en clases).

  • Se ha solucionado un problema por el que el cliente de prueba, si se utiliza con la sentencia «with», no desencadena la ejecución de los manejadores de desmontaje.

  • Se ha añadido un control más fino sobre los parámetros de las cookies de sesión.

  • Las peticiones HEAD a una vista de método ahora se envían automáticamente al método get si no se ha implementado ningún manejador.

  • Se implementó el paquete virtual flask.ext desde el cual importar extensiones.

  • La preservación del contexto en las excepciones es ahora un componente integral de Flask y no del cliente de prueba. Esto ha limpiado parte de la lógica interna y disminuye las probabilidades de que los contextos de solicitud se desborden en las pruebas unitarias.

  • Corregido el método list_templates del entorno Jinja2 que no devolvía los nombres correctos cuando se trataba de blueprints o módulos.

Versión 0.7.2

Lanzamiento 2011-07-06

  • Se ha solucionado un problema con los procesadores de URL que no funcionaban correctamente en los planos.

Versión 0.7.1

Lanzamiento 2011-06-29

  • Se ha añadido la importación future que faltaba y que rompía la compatibilidad con 2.5.

  • Se ha corregido un problema de redirección infinita con los blueprints.

Versión 0.7

Lanzamiento 2011-06-28, codename Grappa

  • Se añadió Flask.make_default_options_response, que puede ser utilizado por las subclases para modificar el comportamiento predeterminado de las respuestas OPTIONS.

  • Las variables locales no enlazadas ahora generan un RuntimeError adecuado en lugar de un AttributeError.

  • La inferencia de mimetype y el soporte de etag basados en objetos de archivo ahora están obsoletos para send_file porque no eran fiables. En su lugar, pasa nombres de archivo o adjunta tus propios etags y proporciona manualmente un mimetype adecuado.

  • El manejo de archivos estáticos para los módulos ahora requiere que el nombre de la carpeta static sea suministrado explícitamente. La autodetección anterior no era fiable y causaba problemas en el App Engine de Google. Hasta la versión 1.0, el comportamiento anterior seguirá funcionando pero emitirá advertencias de dependencia.

  • Se ha corregido un problema para que Flask se ejecute en jython.

  • Se ha añadido una variable de configuración PROPAGATE_EXCEPTIONS que puede utilizarse para cambiar la configuración de la propagación de excepciones, que antes estaba vinculada únicamente a DEBUG y ahora está vinculada a DEBUG o a TESTING.

  • Flask ya no depende internamente de las reglas que se añaden a través de la función add_url_rule y ahora también puede aceptar reglas regulares de werkzeug añadidas al mapa de url.

  • Se ha añadido un método endpoint al objeto de aplicación flask que permite registrar una devolución de llamada a un endpoint arbitrario con un decorador.

  • Se utiliza Last-Modified para el envío de archivos estáticos en lugar de Date que fue introducido incorrectamente en 0.6.

  • Se ha añadido create_jinja_loader para anular el proceso de creación del cargador.

  • Se ha implementado una señal silenciosa para config.from_pyfile.

  • Se ha añadido el decorador teardown_request, para las funciones que deben ejecutarse al final de una petición, independientemente de si se ha producido una excepción. También se ha cambiado el comportamiento de after_request. Ahora ya no se ejecuta cuando se produce una excepción.

  • Se ha implementado «has_request_context».

  • Se declara obsoleto init_jinja_globals. En su lugar, sobrescribe el método Flask.create_jinja_environment para lograr la misma funcionalidad.

  • Se ha añadido safe_join.

  • El desempaquetado automático de los datos de la solicitud JSON ahora busca el parámetro charset mimetype.

  • No se modifica la sesión en get_flashed_messages si no hay mensajes en la sesión.

  • Los manejadores before_request son ahora capaces de abortar las solicitudes con errores.

  • No es posible definir manejadores de excepción de usuario. De este modo, puede proporcionar mensajes de error personalizados desde un centro para determinados errores que pueden producirse durante el procesamiento de las solicitudes (por ejemplo, errores de conexión a la base de datos, tiempos de espera de los recursos remotos, etc.).

  • Los blueprints pueden proporcionar manejadores de error específicos para cada blueprint.

  • Implementación de vistas genéricas basadas en clases.

Versión 0.6.1

Lanzamiento 2010-12-31

  • Se ha solucionado un problema por el que la respuesta por defecto OPTIONS no exponía todos los métodos válidos en la cabecera Allow.

  • La sintaxis de carga de plantillas de Jinja2 ahora permite «./» delante de una ruta de carga de plantillas. Anteriormente esto causaba problemas con las configuraciones de los módulos.

  • Se ha solucionado un problema por el que se ignoraba la configuración del subdominio para los módulos en la carpeta static.

  • Se ha corregido un problema de seguridad que permitía a los clientes descargar archivos arbitrarios si el servidor anfitrión era un sistema operativo basado en Windows y el cliente utilizaba barras invertidas para escapar del directorio desde el que se exponían los archivos.

Versión 0.6

Lanzamiento 2010-07-27, codename Whisky

  • Las funciones posteriores a la solicitud se llaman ahora en orden inverso al registro.

  • OPTIONS es ahora implementado automáticamente por Flask a menos que la aplicación añada explícitamente “OPTIONS” como método a la regla de la URL. En este caso, no se aplica la gestión automática de OPTIONS.

  • Las reglas estáticas están ahora incluso en su lugar si no hay una carpeta estática para el módulo. Esto se implementó para ayudar a GAE que eliminará la carpeta estática si es parte de un mapeo en el archivo .yml.

  • Flask.config ahora está disponible en las plantillas como config.

  • Los procesadores de contexto ya no anularán los valores pasados directamente a la función de renderización.

  • Añadida la posibilidad de limitar los datos de la solicitud entrante con el nuevo valor de configuración MAX_CONTENT_LENGTH.

  • El endpoint para el método Module.add_url_rule ahora es opcional, para ser coherente con la función del mismo nombre en el objeto de la aplicación.

  • Se añadió la función make_response que simplifica la creación de instancias de objetos de respuesta en las vistas.

  • Se añadió soporte de señales basado en blinker. Esta característica es actualmente opcional y se supone que debe ser utilizada por extensiones y aplicaciones. Si deseas usarla, asegúrate de tener blinker instalado.

  • Se refactorizó la forma en que se crean los adaptadores de URL. Este proceso ahora es completamente personalizable mediante el método Flask.create_url_adapter.

  • Ahora los módulos pueden registrarse para un subdominio en lugar de sólo un prefijo de URL. Esto permite vincular un módulo completo a un subdominio configurable.

Versión 0.5.2

Lanzamiento 2010-07-15

  • Solucionado otro problema con la carga de plantillas desde los directorios cuando se utilizan módulos.

Versión 0.5.1

Lanzamiento 2010-07-06

  • Se corrige un problema con la carga de plantillas desde los directorios cuando se utilizan módulos.

Versión 0.5

Lanzamiento 2010-07-06, codename Calvados

  • Corregido un error con los subdominios que era causado por la imposibilidad de especificar el nombre del servidor. Ahora el nombre del servidor se puede establecer con la clave de configuración SERVER_NAME. Esta clave también se utiliza ahora para establecer la cookie de sesión en todos los subdominios.

  • El autoescapado ya no está activo para todas las plantillas. En su lugar, sólo está activo para .html, .htm, .xml y .xhtml. Dentro de las plantillas este comportamiento se puede cambiar con la etiqueta autoescape.

  • Refactorizado Flask internamente. Ahora consta de más de un archivo.

  • send_file ahora genera etags y tiene la capacidad de realizar respuestas condicionales de manera integrada.

  • Suprimida (temporalmente) la compatibilidad con las aplicaciones comprimidas. Se trataba de una función poco utilizada y daba lugar a comportamientos confusos.

  • Añadido soporte para plantillas por paquete y directorios de archivos estáticos.

  • Eliminada la compatibilidad con create_jinja_loader, que ya no se utiliza en la versión 0.5 debido a la mejora del soporte de los módulos.

  • Añadida una función de ayuda para exponer archivos de cualquier directorio.

Versión 0.4

Lanzamiento 2010-06-18, codename Rakia

  • Añadida la posibilidad de registrar los gestores de errores de toda la aplicación desde los módulos.

  • Los manejadores Flask.after_request ahora también se invocan si la solicitud termina con una excepción y se activa una página de manejo de errores.

  • El cliente de pruebas no tiene la capacidad de preservar el contexto de la solicitud por un poco más de tiempo. Esto también se puede utilizar para desencadenar las solicitudes personalizadas que no saltan la pila de solicitudes para las pruebas.

  • Debido a que la biblioteca estándar de Python almacena en caché los registradores, el nombre del registrador es ahora configurable para soportar mejor los unittests.

  • Añadido el interruptor TESTING que puede activar los ayudantes de unitesting.

  • El registrador cambia al modo DEBUG si la depuración está activada.

Versión 0.3.1

Lanzamiento 2010-05-28

  • Se ha corregido un error de notificación de errores con Config.from_envvar.

  • Se ha eliminado parte del código que no se utilizaba.

  • La versión ya no incluye los archivos sobrantes de desarrollo (carpeta .git para los temas, documentación construida en zip y archivo pdf y algunos archivos .pyc)

Versión 0.3

Lanzamiento 2010-05-28, codename Schnaps

  • Añadido soporte para las categorías de los mensajes flash.

  • La aplicación ahora configura un logging.Handler y registrará las excepciones durante el manejo de solicitudes en ese logger cuando no esté en modo de depuración. Esto permite, por ejemplo, recibir correos electrónicos en caso de errores del servidor.

  • Añadido soporte para la vinculación contextual que no requiere el uso de la sentencia with para jugar en la consola.

  • El contexto de la solicitud está ahora disponible dentro de la sentencia with, lo que hace posible empujar el contexto de la solicitud o hacerlo desaparecer.

  • Añadido soporte para las configuraciones.

Versión 0.2

Lanzamiento 2010-05-12, codename J?germeister

  • Varias correcciones de errores

  • Soporte JSON integrado

  • Se añadió la función auxiliar get_template_attribute.

  • Flask.add_url_rule ahora también puede registrar una función de vista.

  • Refactorización del envío de solicitudes internas.

  • El servidor escucha en 127.0.0.1 por defecto para solucionar problemas con Chrome.

  • Añadido soporte de URLs externas.

  • Se ha añadido compatibilidad con «send_file».

  • Soporte de módulos y refactorización del manejo de solicitudes internas para soportar mejor las aplicaciones conectables.

  • Ahora se puede establecer que las sesiones sean permanentes en función de cada una de ellas.

  • Mejora de los informes de error sobre la falta de claves secretas.

  • Añadido soporte para Google Appengine.

Versión 0.1

Lanzamiento 2010-04-16

  • Primer lanzamiento público.