Cambios¶
Version 2.3.2¶
Released 2023-05-01
Set
Vary: Cookie
header when the session is accessed, modified, or refreshed.Update Werkzeug requirement to >=2.3.3 to apply recent bug fixes.
Version 2.3.1¶
Released 2023-04-25
Restore deprecated
from flask import Markup
. #5084
Version 2.3.0¶
Released 2023-04-25
Drop support for Python 3.7. #5072
Update minimum requirements to the latest versions: Werkzeug>=2.3.0, Jinja2>3.1.2, itsdangerous>=2.1.2, click>=8.1.3.
Remove previously deprecated code. #4995
The
push
andpop
methods of the deprecated_app_ctx_stack
and_request_ctx_stack
objects are removed.top
still exists to give extensions more time to update, but it will be removed.The
FLASK_ENV
environment variable,ENV
config key, andapp.env
property are removed.The
session_cookie_name
,send_file_max_age_default
,use_x_sendfile
,propagate_exceptions
, andtemplates_auto_reload
properties onapp
are removed.The
JSON_AS_ASCII
,JSON_SORT_KEYS
,JSONIFY_MIMETYPE
, andJSONIFY_PRETTYPRINT_REGULAR
config keys are removed.The
app.before_first_request
andbp.before_app_first_request
decorators are removed.json_encoder
andjson_decoder
attributes on app and blueprint, and the correspondingjson.JSONEncoder
andJSONDecoder
classes, are removed.The
json.htmlsafe_dumps
andhtmlsafe_dump
functions are removed.Calling setup methods on blueprints after registration is an error instead of a warning. #4997
Importing
escape
andMarkup
fromflask
is deprecated. Import them directly frommarkupsafe
instead. #4996The
app.got_first_request
property is deprecated. #4997The
locked_cached_property
decorator is deprecated. Use a lock inside the decorated function if locking is needed. #4993Signals are always available.
blinker>=1.6.2
is a required dependency. Thesignals_available
attribute is deprecated. #5056Signals support
async
subscriber functions. #5049Remove uses of locks that could cause requests to block each other very briefly. #4993
Use modern packaging metadata with
pyproject.toml
instead ofsetup.cfg
. #4947Ensure subdomains are applied with nested blueprints. #4834
config.from_file
can usetext=False
to indicate that the parser wants a binary file instead. #4989If a blueprint is created with an empty name it raises a
ValueError
. #5010SESSION_COOKIE_DOMAIN
does not fall back toSERVER_NAME
. The default is not to set the domain, which modern browsers interpret as an exact match rather than a subdomain match. Warnings aboutlocalhost
and IP addresses are also removed. #5051The
routes
command shows each rule’ssubdomain
orhost
when domain matching is in use. #5004Use postponed evaluation of annotations. #5071
Version 2.2.5¶
Released 2023-05-02
Update for compatibility with Werkzeug 2.3.3.
Set
Vary: Cookie
header when the session is accessed, modified, or refreshed.
Version 2.2.4¶
Released 2023-04-25
Update for compatibility with Werkzeug 2.3.
Version 2.2.3¶
Released 2023-02-15
Version 2.2.2¶
Released 2022-08-08
Version 2.2.1¶
Released 2022-08-03
Setting or accessing
json_encoder
orjson_decoder
raises a deprecation warning. #4732
Versión 2.2.0¶
Released 2022-08-01
Remove previously deprecated code. #4667
Se han eliminado los antiguos nombres de algunos parámetros de
send_file
.download_name
sustituye aattachment_filename
,max_age
sustituye acache_timeout
, yetag
sustituye aadd_etags
. Además,path
sustituye afilename
ensend_from_directory
.Se elimina la propiedad
RequestContext.g
que devuelveAppContext.g
.
Update Werkzeug dependency to >= 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. #4682Mantenedores de extensiones, tened en cuenta que
_app_ctx_stack.top
y_request_ctx_stack.top
están obsoletos. Almacena los datos eng
en su lugar utilizando un prefijo único, comog._extension_name_attr
.
The
FLASK_ENV
environment variable andapp.env
attribute are deprecated, removing the distinction between development and debug mode. Debug mode should be controlled directly using the--debug
option orapp.run(debug=True)
. #4714Some attributes that proxied config keys on
app
are deprecated:session_cookie_name
,send_file_max_age_default
,use_x_sendfile
,propagate_exceptions
, andtemplates_auto_reload
. Use the relevant config keys instead. #4716Añade nuevos puntos de personalización al objeto de aplicación
Flask
para muchos comportamientos anteriormente globales.flask.url_for
llamará aapp.url_for
. #4568flask.abort
llamará aapp.aborter
. Se puede utilizarFlask.aborter_class
yFlask.make_aborter
para personalizar este abortador. #4567flask.redirect
llamará aapp.redirect
. #4569flask.json
is an instance ofJSONProvider
. A different provider can be set to use a different JSON library.flask.jsonify
will callapp.json.response
, other functions inflask.json
will call corresponding functions inapp.json
. #4692
JSON configuration is moved to attributes on the default
app.json
provider.JSON_AS_ASCII
,JSON_SORT_KEYS
,JSONIFY_MIMETYPE
, andJSONIFY_PRETTYPRINT_REGULAR
are deprecated. #4692Setting custom
json_encoder
andjson_decoder
classes on the app or a blueprint, and the correspondingjson.JSONEncoder
andJSONDecoder
classes, are deprecated. JSON behavior can now be overridden using theapp.json
provider interface. #4692json.htmlsafe_dumps
andjson.htmlsafe_dump
are deprecated, the function is built-in to Jinja now. #4692Refactorizar
register_error_handler
para consolidar la comprobación de errores. Reescribir algunos mensajes de error para que sean más consistentes. #4559El 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. #4605Se ha añadido el atributo de clase
View.init_every_request
. Si una subclase de la vista lo establece enFalse
, 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. #3263Add
--app
and--debug
options to theflask
CLI, instead of requiring that they are set through environment variables. #2836Añadir la opción
--env-file
al CLI deflask
. Esto permite especificar un archivo dotenv para cargar además de.env
y.flaskenv
. #3108Ya no es necesario decorar los comandos CLI personalizados en
app.cli
oblueprint.cli
con@with_appcontext
, un contexto de aplicación ya estará activo en ese punto. #2410SessionInterface.get_expiration_time
utiliza un valor que tiene en cuenta la zona horaria. #4645Las funciones de vista pueden devolver generadores directamente en lugar de envolverlos en una
Response
. #4629Añade las funciones
stream_template
ystream_template_string
para representar una plantilla como un flujo de piezas. #4629Una 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. #2836Las 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 bloquewith client
. Se limpiará cuando se llame aresponse.get_data()
oresponse.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
When type checking, allow
TypedDict
to be returned from view functions. #4695Remove the
--eager-loading/--lazy-loading
options from theflask run
command. The app is always eager loaded the first time, then lazily loaded in the reloader. The reloader always prints errors immediately but continues serving. Remove the internalDispatchingApp
middleware used by the previous implementation. #4715
Versión 2.1.3¶
Released 2022-07-13
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
. #4600instance_path
for namespace packages uses the path closest to the imported submodule. #4610Clearer error message when
render_template
andrender_template_string
are used outside an application context. #4693
Versión 2.1.2¶
Lanzamiento 2022-04-28
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 porconfig.from_file(name, load=json.load)
.Las funciones
json
ya no toman el parámetroencoding
.Se ha eliminado
safe_join
, utilice en su lugarwerkzeug.utils.safe_join
.Se ha eliminado
total_seconds
, utilicetimedelta.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. Utilizaresponse.request.environ
en su lugar. #4417
Algunos parámetros de
send_file
ysend_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 adownload_name
.cache_timeout
es renombrado amax_age
.add_etags
es renombrado aetag
.filename
es renombrado apath
.
La propiedad
RequestContext.g
está obsoleta. Utiliceg
directamente oAppContext.g
en su lugar. #3898copy_current_request_context
puede decorar funciones async. #4303La CLI utiliza
importlib.metadata
en lugar desetuptools
para cargar puntos de entrada de comandos. #4419Anular
FlaskClient.open
no causará un error en la redirección. #3396Añade una opción
--exclude-patterns
al comando CLIflask run
para especificar patrones que serán ignorados por el recargador. #4188Cuando se utiliza la carga perezosa (por defecto con el depurador), el contexto Click del comando
flask run
permanece disponible en el hilo del cargador. #4460La eliminación de la cookie de sesión utiliza la bandera
httponly
. #4485Relajar la tipificación de
errorhandler
para permitir al usuario utilizar tipos más precisos y decorar la misma función varias veces. #4095, #4295, #4297Corregir la tipificación de los métodos
__exit__
para mejorar la compatibilidad conExitStack
. #4474Desde 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. #4496Añade
Config.from_prefixed_env()
para cargar los valores de configuración de las variables de entorno que comienzan conFLASK_
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. Utilizaresponse.request.environ
en su lugar. #4341Corrige la anotación de tipo para el decorador
errorhandler
. #4295Revierte un cambio en la CLI que provocaba que se ocultaran los tracebacks de
ImportError
al importar la aplicación. #4307app.json_encoder
yjson_decoder
sólo se pasan adumps
yloads
si tienen un comportamiento personalizado. Esto mejora el rendimiento, principalmente en PyPy. #4349Mensaje 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_*
. #4093Corrige la anotación de tipo para los decoradores
before_request
ybefore_app_request
. #4104Solucionado 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
. #4095Corrige el registro de un blueprint dos veces con nombres diferentes. #4124
Corrige el tipo de
static_folder
para aceptarpathlib.Path
. #4150jsonify
manejadecimal.Decimal
codificando astr
. #4157Manejar correctamente el levantamiento de errores diferidos en la carga retardada de la CLI. #4096
El cargador CLI maneja
**kwargs
en una funcióncreate_app
. #4170Corregido 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
ensend_from_directory
. El parámetrofilename
ha sido renombrado apath
, el antiguo nombre está obsoleto. #4019Marcar 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. #4020Corrige algunos tipos que no estaban disponibles en Python 3.6.0. #4040
Mejora la tipificación de
send_file
,send_from_directory
yget_send_file_max_age
. #4044, #4026Muestra 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. #4041Combina prefijos de URL al anidar blueprints creados con un valor
url_prefix
. #4037Revertir 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. #4078Mejora la tipificación de algunas funciones que utilizan
Callable
en sus firmas de tipo, centrándose en las fábricas de decoradores. #4060Los 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ónname
para cambiar el nombre (pre-punteado) con el que se registra el blueprint. Esto permite registrar el mismo blueprint varias veces con nombres únicos paraurl_for
. Registrar el mismo blueprint con el mismo nombre varias veces está obsoleto. #1091Mejora la tipificación de
stream_with_context
. #4052
Versión 2.0.0¶
Released 2021-05-11
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
yjson_decoder
. #3555La opción
encoding
de las funciones JSON está obsoleta. #3562Pasa
script_info
a las funciones de fábrica de la aplicación está obsoleto. Esto no era portable fuera del comandoflask
. Usaclick.get_current_context().obj
si es necesario. #3552La CLI muestra mejores mensajes de error cuando la aplicación no se carga al buscar comandos. #2741
Add
SessionInterface.get_cookie_name
to allow setting the session cookie name dynamically. #3369Add
Config.from_file
to load config using arbitrary file loaders, such astoml.load
orjson.load
.Config.from_json
is deprecated in favor of this. #3398El 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. #3431send_file
raises aValueError
when passed anio
object in text mode. Previously, it would respond with 200 OK and an empty file. #3358Al 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. #3553Al cargar un archivo
.env
o.flaskenv
, el directorio de trabajo actual ya no se cambia a la ubicación del archivo. #3560Cuando 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 elContent-Type
parajsonify()
. Utilizaresponse.headers.extend()
si deseas extenderla. #3628La clase
Scaffold
proporciona una API común para las clasesFlask
yBlueprint
. La información deBlueprint
se almacena en atributos al igual queFlask
, en lugar de funciones lambda opacas. Esto pretende mejorar la consistencia y la capacidad de mantenimiento. #3215Incluye las opciones
samesite
ysecure
al eliminar la cookie de sesión. #3726Soporta pasar un
pathlib.Path
astatic_folder
. #3579send_file
ysend_from_directory
son envolturas alrededor de las implementaciones enwerkzeug.utils
. #3828Algunos parámetros de
send_file
han sido renombrados, los antiguos nombres están obsoletos. El nombre deattachment_filename
ha cambiado adownload_name
. El nombre decache_timeout
ha cambiado amax_age
.add_etags
pasa a llamarseetag
. #3828, #3883send_file
pasadownload_name
incluso sias_attachment=False
utilizandoContent-Disposition: inline
. #3828send_file
establececonditional=True
ymax_age=None
por defecto.Cache-Control
se establece comono-cache
simax_age
no se establece, en caso contrariopublic
. Esto indica a los navegadores que validen las peticiones condicionales en lugar de utilizar una caché temporizada. #3828helpers.safe_join
está obsoleto. Utilizawerkzeug.utils.safe_join
en su lugar. #3828El 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
. #3776Utiliza la implementación de Jinja del filtro
|tojson
. #3881Añade decoradores de ruta para métodos HTTP comunes. Por ejemplo,
@app.post("/login")
es un atajo para@app.route("/login", methods=["POST"])
. #3907Soporta vistas asíncronas, manejadores de error, antes y después de la solicitud, y funciones de desmontaje. #3412
Establece la codificación por defecto en «UTF-8» al cargar los archivos
.env
y.flaskenv
para permitir el uso de caracteres no ASCII. #3931flask shell
configura el completamiento de pestañas e historial como el shellpython
por defecto sireadline
está instalado. #3941helpers.total_seconds()
está obsoleto. Utilicetimedelta.total_seconds()
en su lugar. #3962Añ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 deos.fspath
para seguir soportando Python < 3.6 #4050
Versión 1.1.3¶
Publicado el 2021-05-13
Versión 1.1.2¶
Lanzamiento 2020-04-03
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
o500
siempre se les pasará una instancia deInternalServerError
. Si son invocados debido a una excepción no manejada, esa excepción original está ahora disponible comoe.original_exception
en lugar de ser pasada directamente al manejador. Lo mismo ocurre si el manejador es para la baseHTTPException
. Esto hace que el comportamiento del manejador de errores sea más consistente. #3266Flask.finalize_request
is called for all unhandled exceptions even if there is no500
error handler.
Flask.logger
takes the same name asFlask.name
(the value passed asFlask(import_name)
. This reverts 1.0’s behavior of always logging to"flask.app"
, in order to support multiple apps in the same process. A warning will be shown if old configuration is detected that needs to be moved. #2866RequestContext.copy
includes the current session object in the request context copy. This preventssession
pointing to an out-of-date object. #2935Utilizando 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
supportsPathLike
objects as described in PEP 519, to supportpathlib
in Python 3. #3059send_file
supportsBytesIO
partial content. #2957open_resource
accepts the «rt» file mode. This still does the same thing as «r». #3163The
MethodView.methods
attribute set in a base class is used by subclasses. #3138Flask.jinja_options
is adict
instead of anImmutableDict
to allow easier configuration. Changes must still be made before creating the environment. #3190El
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. #3125El 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. #3022Soporta
static_url_path
que termina con una barra diagonal. #3134Soporta
static_folder
vacía sin necesidad de establecer también unastatic_url_path
vacía. #3124jsonify
supportsdataclass
objects. #3195Allow customizing the
Flask.url_map_class
used for routing. #3069El puerto del servidor de desarrollo puede establecerse en 0, lo que indica al sistema operativo que elija un puerto disponible. #2926
The return value from
cli.load_dotenv
is more consistent with the documentation. It will returnFalse
if python-dotenv is not installed, or if the given path isn’t a file. #2937El soporte de señalización tiene un stub para el método
connect_via
cuando la biblioteca Blinker no está instalada. #3208Añade una opción
--extra-files
al comando CLIflask run
para especificar archivos extra que activarán el recargador al cambiar. #2897Permite devolver un diccionario desde una función de vista. Al igual que devolver una cadena producirá una respuesta
text/html
, devolver un dict llamará ajsonify
para producir una respuestaapplication/json
. #3111Los blueprints tienen un grupo de clics
cli
comoapp.cli
. Los comandos CLI registrados con un blueprint estarán disponibles como grupo bajo el comandoflask
. #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. #3157Muestra 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 claseflask.testing.EnvironBuilder
. #3232El 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. #3211La 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. #3249La url
send_file
entrecomilla los caracteres «:» y «/» para hacer más compatible el nombre de archivo UTF-8 en algunos navegadores. #3074Muestra mensaje sobre dotenv en stderr en lugar de stdout. #3285
Versión 1.0.3¶
Lanzamiento 2019-05-17
send_file
encodes filenames as ASCII instead of Latin-1 (ISO-8859-1). This fixes compatibility with Gunicorn, which is stricter about header encodings than PEP 3333. #2766Permitir 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. #2765flask --version
da como resultado la versión de Werkzeug y simplifica la versión de Python. #2825send_file
handles anattachment_filename
that is a native Python 2 string (bytes) with UTF-8 coded bytes. #2933Un 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. #2986Pasa el argumento
json
aapp.test_client
no hace push/pop de un contexto de aplicación extra. #2900
Versión 1.0.2¶
Publicado el 2018-05-02
Versión 1.0.1¶
Publicado 2018-04-29
Corrige el registro de parciales (sin
__name__
) como funciones de vista. #2730No 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, #2742Sólo se atrapan los errores
BadRequestKeyError
en modo de depuración, no todos los erroresBadRequest
. Esto permite queabort(400)
siga funcionando como se espera. #2735La variable de entorno
FLASK_SKIP_DOTENV
puede establecerse en1
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
Skip
app.run
when a Flask application is run from the command line. This avoids some behavior that was confusing to debug.Change the default for
JSONIFY_PRETTYPRINT_REGULAR
toFalse
.~json.jsonify
returns a compact format by default, and an indented format in debug mode. #2193Flask.__init__
accepts thehost_matching
argument and sets it onFlask.url_map
. #1559Flask.__init__
accepts thestatic_host
argument and passes it as thehost
argument when defining the static route. #1559send_file
supports Unicode inattachment_filename
. #2223Pass
_scheme
argument fromurl_for
toFlask.handle_url_build_error
. #2017Flask.add_url_rule
accepts theprovide_automatic_options
argument to disable adding theOPTIONS
method. #1489MethodView
subclasses inherit method handlers from base classes. #1936Los errores causados al abrir la sesión al inicio de la solicitud son manejados por los manejadores de errores de la aplicación. #2254
Blueprints gained
Blueprint.json_encoder
andBlueprint.json_decoder
attributes to override the app’s encoder and decoder. #1898Flask.make_response
raisesTypeError
instead ofValueError
for bad response types. The error messages have been improved to describe why the type is invalid. #2256Añade el comando CLI
routes
para dar salida a las rutas registradas en la aplicación. #2259Mostrar 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 deSERVER_NAME
. #2282Detecta automáticamente la fábrica de aplicaciones sin argumentos llamada
create_app
omake_app
deFLASK_APP
. #2297Factory functions are not required to take a
script_info
parameter to work with theflask
command. If they take a single parameter or a parameter namedscript_info
, theScriptInfo
object will be passed. #2319FLASK_APP
puede establecerse en una fábrica de aplicaciones, con argumentos si es necesario, por ejemploFLASK_APP=myproject.app:create_app('dev')
. #2326FLASK_APP
puede apuntar a paquetes locales que no están instalados en modo editable, aunque sigue siendo preferiblepip install -e
. #2414The
View
class attributeView.provide_automatic_options
is set inView.as_view
, to be detected byFlask.add_url_rule
. #2316El manejo de errores probará los manejadores registrados para
blueprint, code
,app, code
,blueprint, exception
,app, exception
. #2314Se añade
Cookie
a la cabeceraVary
de la respuesta si se accede a la sesión durante la solicitud (y no se borra). #2288Flask.test_request_context
acceptssubdomain
andurl_scheme
arguments for use when building the base URL. #1621Set
APPLICATION_ROOT
to'/'
by default. This was already the implicit default when it was set toNone
.TRAP_BAD_REQUEST_ERRORS
is enabled by default in debug mode.BadRequestKeyError
has a message with the bad key in debug mode instead of the generic bad request message. #2348Allow registering new tags with
TaggedJSONSerializer
to support storing other types in the session cookie. #2352Only open the session if the request has not been pushed onto the context stack yet. This allows
stream_with_context
generators to access the same session that the containing view uses. #2354Añ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. #2358Extract JSON handling to a mixin applied to both the
Request
andResponse
classes. This adds theResponse.is_json
andResponse.get_json
methods to the response to make testing JSON response much easier. #2358Eliminado 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
Template auto reloading will honor debug mode even even if
Flask.jinja_env
was already accessed. #2373Eliminado el siguiente código obsoleto. #2385
flask.ext
- importar extensiones directamente por su nombre en lugar de a través del espacio de nombresflask.ext
. Por ejemplo,import flask.ext.sqlalchemy
se convierte enimport flask_sqlalchemy
.Flask.init_jinja_globals
- extendFlask.create_jinja_environment
instead.Flask.error_handlers
- tracked byFlask.error_handler_spec
, useFlask.errorhandler
to register handlers.Flask.request_globals_class
- useFlask.app_ctx_globals_class
instead.Flask.static_path
- useFlask.static_url_path
instead.Request.module
- useRequest.blueprint
instead.
The
Request.json
property is no longer deprecated. #1421Support passing a
EnvironBuilder
ordict
totest_client.open
. #2412The
flask
command andFlask.run
will load environment variables from.env
and.flaskenv
files if python-dotenv is installed. #2416When passing a full URL to the test client, the scheme in the URL is used instead of
PREFERRED_URL_SCHEME
. #2430Flask.logger
has been simplified.LOGGER_NAME
andLOGGER_HANDLER_POLICY
config was removed. The logger is always namedflask.app
. The level is only set on first access, it doesn’t checkFlask.debug
each time. Only one format is used, not different ones depending onFlask.debug
. No handlers are removed, and a handler is only added if no handlers are already configured. #2436Los nombres de las funciones de la vista Blueprint no pueden contener puntos. #2450
Corregido un
ValueError
causado por peticiones deRange
no válidas en algunos casos. #2526El servidor de desarrollo utiliza hilos por defecto. #2529
Loading config files with
silent=True
will ignoreENOTDIR
errors. #2581Pasa las opciones
--cert
y--key
aflask run
para ejecutar el servidor de desarrollo sobre HTTPS. #2606Added
SESSION_COOKIE_SAMESITE
to control theSameSite
attribute on the session cookie. #2607Added
Flask.test_cli_runner
to create a Click runner that can invoke Flask CLI commands for testing. #2636Subdomain matching is disabled by default and setting
SERVER_NAME
does not implicitly enable it. It can be enabled by passingsubdomain_matching=True
to theFlask
constructor. #2635Se elimina una sola barra al final del plano
url_prefix
cuando se registra en la aplicación. #2629Request.get_json
doesn’t cache the result if parsing fails whensilent
is true. #2651Request.get_json
no longer accepts arbitrary encodings. Incoming JSON should be encoded using UTF-8 per RFC 8259, but Flask will autodetect UTF-8, -16, or -32. #2691Added
MAX_COOKIE_SIZE
andResponse.max_cookie_size
to control when Werkzeug warns about large cookies that browsers may ignore. #2693Actualizado 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
no longer accepts arbitrary encodings. Incoming JSON should be encoded using UTF-8 per RFC 8259, but Flask will autodetect UTF-8, -16, or -32. #2692Corrige una advertencia de Python sobre las importaciones cuando se utiliza
python -m flask
. #2666Corrige un
ValueError
causado por peticiones deRange
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 unaNoAppException
cuando se produce unImportError
dentro del módulo de aplicación importado.Corrige el comportamiento de codificación de
app.config.from_pyfile
para Python 3. #2118Utiliza la configuración
SERVER_NAME
si está presente como valor por defecto paraapp.run
. #2109, #2152Llama a
ctx.auto_pop
con el objeto de excepción en lugar deNone
, en el caso de que unaBaseException
comoKeyboardInterrupt
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 aapplication/octet-stream
. #1988Hace que
flask.safe_join
pueda unir múltiples rutas comoos.path.join
#1730Revertir 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 porclient.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
Added support to serializing top-level arrays to
jsonify
. This introduces a security risk in ancient browsers.Añadida la señal before_render_template.
Added
**kwargs
toFlask.test_client
to support passing additional keyword arguments to the constructor ofFlask.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 enTrue
una sesión permanente se refrescará cada vez que se solicite y se extenderá su vida útil, si se establece enFalse
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.Added
Config.from_json
.Added
Flask.config_class
.Added
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.
Added
flask
and theflask.cli
module to start the local debug server through the click CLI system. This is recommended over the oldflask.run()
method as it works faster and more reliable due to a different design and also replacesFlask-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.Added
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 derequest.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.JSON responses are now terminated with a newline character, because it is a convention that UNIX text files end with a newline and some clients don’t deal well when this newline is missing. #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úsculaoptions
. #1288flask.json.jsonify
ahora soporta el tipodatetime.date
. #1326No 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étodospop()
ysetdefault
.Activa el autoescape para
flask.templating.render_template_string
por defecto. #1515flask.ext
está ahora obsoleto. #1484send_from_directory
ahora lanza BadRequest si el nombre del archivo no es válido en el SO del servidor. #1763Añadida la variable de configuración
JSONIFY_MIMETYPE
. #1728Las 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()
.Raise an
AttributeError
inhelpers.find_package
with a useful message explaining why it is raised when a PEP 302 import hook is used without anis_package()
method.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 elBuildError
.
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étodostemplate_filter
ya existente.Se han añadido métodos
template_global
además de la familia de métodostemplate_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
. Utilizaflask.sessions
en su lugar para obtener el módulo de sesión. Esto no debe confundirse conflask.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
yg
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étodoget()
para que no se produzcan errores en elementos no existentes.flask.g
ahora se puede utilizar con el operadorin
para ver lo que está definido y ahora es iterable y dará todos los atributos almacenados.flask.Flask.request_globals_class
fue renombrado aflask.Flask.app_ctx_globals_class
que es un nombre mejor para lo que hace desde 0.10.request
,session
yg
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
yappcontext_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 propiedadflask.request.json
.
Versión 0.9¶
Lanzamiento 2012-07-01, codename Campari
The
Request.on_json_loading_failed
now returns a JSON formatted response by default.The
url_for
function now can generate anchors to the generated links.The
url_for
function now can also explicitly generate URL rules specific to a given HTTP method.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.
The
Flask
class will avoid importing the provided import name if it can (the required first parameter), to benefit tools which build Flask instances programmatically. The Flask class will fall back to using import on systems with custom module hooks, e.g. Google App Engine, or when the import name is inside a zip archive (usually an egg) prior to Python 2.7.Blueprints now have a decorator to add custom template filters application wide,
Blueprint.app_template_filter
.The Flask and Blueprint classes now have a non-decorator method for adding custom template filters application wide,
Flask.add_template_filter
andBlueprint.add_app_template_filter
.The
get_flashed_messages
function now allows rendering flashed message categories in separate blocks, through acategory_filter
argument.The
Flask.run
method now acceptsNone
forhost
andport
arguments, using default values whenNone
. This allows for calling run using configuration values, e.g.app.run(app.config.get('MYHOST'), app.config.get('MYPORT'))
, with proper behavior whether or not a config file is provided.The
render_template
method now accepts a either an iterable of template names or a single template name. Previously, it only accepted a single template name. On an iterable, the first template found is rendered.Added
Flask.app_context
which works very similar to the request context but only provides access to the current application. This also adds support for URL generation without an active request context.View functions can now return a tuple with the first instance being an instance of
Response
. This allows for returningjsonify(error="error msg"), 400
from a view function.Flask
andBlueprint
now provide aget_send_file_max_age
hook for subclasses to override behavior of serving static files from Flask when usingFlask.send_static_file
(used for the default static file handler) andhelpers.send_file
. This hook is provided a filename, which for example allows changing cache controls by file extension. The default max-age forsend_file
and static files can be configured through a newSEND_FILE_MAX_AGE_DEFAULT
configuration variable, which is used in the defaultget_send_file_max_age
implementation.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.
Added
Flask.request_globals_class
to allow a specific class to be used on creation of theg
instance of each request.Se ha añadido el atributo
required_methods
a las funciones de vista para forzar la adición de métodos al registrarse.Added
flask.after_this_request
.Added
flask.stream_with_context
and the ability to push contexts multiple times without producing unexpected behavior.
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.
Added the ability to register callbacks that are only triggered once at the beginning of the first request with
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
.Implemented
TestClient.session_transaction
to easily modify sessions from the test environment.Refactorizado el cliente de prueba internamente. La variable de configuración
APPLICATION_ROOT
así comoSERVER_NAME
son ahora utilizadas correctamente por el cliente de prueba como valores por defecto.Added
View.decorators
to support simpler decorating of pluggable (class-based) views.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.Implemented the virtual
flask.ext
package to import extensions from.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
Added
Flask.make_default_options_response
which can be used by subclasses to alter the default behavior forOPTIONS
responses.Unbound locals now raise a proper
RuntimeError
instead of anAttributeError
.Mimetype guessing and etag support based on file objects is now deprecated for
send_file
because it was unreliable. Pass filenames instead or attach your own etags and provide a proper mimetype by hand.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 aDEBUG
y ahora está vinculada aDEBUG
o aTESTING
.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 deafter_request
. Ahora ya no se ejecuta cuando se produce una excepción.Implemented
has_request_context
.Deprecated
init_jinja_globals
. Override theFlask.create_jinja_environment
method instead to achieve the same functionality.Added
safe_join
.El desempaquetado automático de los datos de la solicitud JSON ahora busca el parámetro charset mimetype.
Don’t modify the session on
get_flashed_messages
if there are no messages in the session.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 cabeceraAllow
.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
is now available in the templates asconfig
.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
.The endpoint for the
Module.add_url_rule
method is now optional to be consistent with the function of the same name on the application object.Added a
make_response
function that simplifies creating response object instances in views.Added signalling support based on blinker. This feature is currently optional and supposed to be used by extensions and applications. If you want to use it, make sure to have
blinker
installed.Refactored the way URL adapters are created. This process is now fully customizable with the
Flask.create_url_adapter
method.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 etiquetaautoescape
.Refactorizado Flask internamente. Ahora consta de más de un archivo.
send_file
now emits etags and has the ability to do conditional responses builtin.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.
Flask.after_request
handlers are now also invoked if the request dies with an exception and an error handling page kicks in.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
Fixed a error reporting bug with
Config.from_envvar
.Removed some unused code.
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.
The application now configures a
logging.Handler
and will log request handling exceptions to that logger when not in debug mode. This makes it possible to receive mails on server errors for example.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
Added
get_template_attribute
helper function.Flask.add_url_rule
can now also register a view function.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.
Added support for
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.