|
|
@ -1,3 +1,5 @@ |
|
|
|
|
|
|
|
.. currentmodule:: flask |
|
|
|
|
|
|
|
|
|
|
|
Flask Changelog |
|
|
|
Flask Changelog |
|
|
|
=============== |
|
|
|
=============== |
|
|
|
|
|
|
|
|
|
|
@ -11,114 +13,126 @@ unreleased |
|
|
|
- Bump minimum dependency versions to the latest stable versions: |
|
|
|
- Bump minimum dependency versions to the latest stable versions: |
|
|
|
Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. |
|
|
|
Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1. |
|
|
|
(`#2586`_) |
|
|
|
(`#2586`_) |
|
|
|
- Make ``app.run()`` into a noop if a Flask application is run from the |
|
|
|
- Skip :meth:`app.run <Flask.run>` when a Flask application is run from |
|
|
|
development server on the command line. This avoids some behavior that |
|
|
|
the command line. This avoids some behavior that was confusing to |
|
|
|
was confusing to debug for newcomers. |
|
|
|
debug. |
|
|
|
- Change default configuration ``JSONIFY_PRETTYPRINT_REGULAR=False``. |
|
|
|
- Change the default for :data:`JSONIFY_PRETTYPRINT_REGULAR` to |
|
|
|
``jsonify()`` method returns compressed response by default, and pretty |
|
|
|
``False``. :func:`~json.jsonify` returns a compact format by default, |
|
|
|
response in debug mode. (`#2193`_) |
|
|
|
and an indented format in debug mode. (`#2193`_) |
|
|
|
- Change ``Flask.__init__`` to accept two new keyword arguments, |
|
|
|
- :meth:`Flask.__init__ <Flask>` accepts the ``host_matching`` argument |
|
|
|
``host_matching`` and ``static_host``. This enables ``host_matching`` to be |
|
|
|
and sets it on :attr:`~Flask.url_map`. (`#1559`_) |
|
|
|
set properly by the time the constructor adds the static route, and enables |
|
|
|
- :meth:`Flask.__init__ <Flask>` accepts the ``static_host`` argument |
|
|
|
the static route to be properly associated with the required host. |
|
|
|
and passes it as the ``host`` argument when defining the static route. |
|
|
|
(``#1559``) |
|
|
|
(`#1559`_) |
|
|
|
- ``send_file`` supports Unicode in ``attachment_filename``. (`#2223`_) |
|
|
|
- :func:`send_file` supports Unicode in ``attachment_filename``. |
|
|
|
- Pass ``_scheme`` argument from ``url_for`` to ``handle_build_error``. |
|
|
|
(`#2223`_) |
|
|
|
(`#2017`_) |
|
|
|
- Pass ``_scheme`` argument from :func:`url_for` to |
|
|
|
- Add support for ``provide_automatic_options`` in ``add_url_rule`` to disable |
|
|
|
:meth:`~Flask.handle_url_build_error`. (`#2017`_) |
|
|
|
adding OPTIONS method when the ``view_func`` argument is not a class. |
|
|
|
- :meth:`~Flask.add_url_rule` accepts the ``provide_automatic_options`` |
|
|
|
(`#1489`_). |
|
|
|
argument to disable adding the ``OPTIONS`` method. (`#1489`_) |
|
|
|
- ``MethodView`` can inherit method handlers from base classes. (`#1936`_) |
|
|
|
- :class:`~views.MethodView` subclasses inherit method handlers from |
|
|
|
- Errors caused while opening the session at the beginning of the request are |
|
|
|
base classes. (`#1936`_) |
|
|
|
handled by the app's error handlers. (`#2254`_) |
|
|
|
- Errors caused while opening the session at the beginning of the |
|
|
|
- Blueprints gained ``json_encoder`` and ``json_decoder`` attributes to |
|
|
|
request are handled by the app's error handlers. (`#2254`_) |
|
|
|
override the app's encoder and decoder. (`#1898`_) |
|
|
|
- Blueprints gained :attr:`~Blueprint.json_encoder` and |
|
|
|
- ``Flask.make_response`` raises ``TypeError`` instead of ``ValueError`` for |
|
|
|
:attr:`~Blueprint.json_decoder` attributes to override the app's |
|
|
|
bad response types. The error messages have been improved to describe why the |
|
|
|
encoder and decoder. (`#1898`_) |
|
|
|
type is invalid. (`#2256`_) |
|
|
|
- :meth:`Flask.make_response` raises ``TypeError`` instead of |
|
|
|
- Add ``routes`` CLI command to output routes registered on the application. |
|
|
|
``ValueError`` for bad response types. The error messages have been |
|
|
|
(`#2259`_) |
|
|
|
improved to describe why the type is invalid. (`#2256`_) |
|
|
|
|
|
|
|
- Add ``routes`` CLI command to output routes registered on the |
|
|
|
|
|
|
|
application. (`#2259`_) |
|
|
|
- Show warning when session cookie domain is a bare hostname or an IP |
|
|
|
- Show warning when session cookie domain is a bare hostname or an IP |
|
|
|
address, as these may not behave properly in some browsers, such as Chrome. |
|
|
|
address, as these may not behave properly in some browsers, such as |
|
|
|
(`#2282`_) |
|
|
|
Chrome. (`#2282`_) |
|
|
|
- Allow IP address as exact session cookie domain. (`#2282`_) |
|
|
|
- Allow IP address as exact session cookie domain. (`#2282`_) |
|
|
|
- ``SESSION_COOKIE_DOMAIN`` is set if it is detected through ``SERVER_NAME``. |
|
|
|
- ``SESSION_COOKIE_DOMAIN`` is set if it is detected through |
|
|
|
(`#2282`_) |
|
|
|
``SERVER_NAME``. (`#2282`_) |
|
|
|
- Auto-detect zero-argument app factory called ``create_app`` or ``make_app`` |
|
|
|
- Auto-detect zero-argument app factory called ``create_app`` or |
|
|
|
from ``FLASK_APP``. (`#2297`_) |
|
|
|
``make_app`` from ``FLASK_APP``. (`#2297`_) |
|
|
|
- Factory functions are not required to take a ``script_info`` parameter to |
|
|
|
- Factory functions are not required to take a ``script_info`` parameter |
|
|
|
work with the ``flask`` command. If they take a single parameter or a |
|
|
|
to work with the ``flask`` command. If they take a single parameter or |
|
|
|
parameter named ``script_info``, the ``ScriptInfo`` object will be passed. |
|
|
|
a parameter named ``script_info``, the :class:`~cli.ScriptInfo` object |
|
|
|
(`#2319`_) |
|
|
|
will be passed. (`#2319`_) |
|
|
|
- FLASK_APP=myproject.app:create_app('dev') support. |
|
|
|
- ``FLASK_APP`` can be set to an app factory, with arguments if needed, |
|
|
|
- ``FLASK_APP`` can be set to an app factory, with arguments if needed, for |
|
|
|
for example ``FLASK_APP=myproject.app:create_app('dev')``. (`#2326`_) |
|
|
|
example ``FLASK_APP=myproject.app:create_app('dev')``. (`#2326`_) |
|
|
|
- ``FLASK_APP`` can point to local packages that are not installed in |
|
|
|
- ``FLASK_APP`` can point to local packages that are not installed in dev mode, |
|
|
|
editable mode, although ``pip install -e`` is still preferred. |
|
|
|
although `pip install -e` should still be preferred. (`#2414`_) |
|
|
|
(`#2414`_) |
|
|
|
- ``View.provide_automatic_options = True`` is set on the view function from |
|
|
|
- The :class:`~views.View` class attribute |
|
|
|
``View.as_view``, to be detected in ``app.add_url_rule``. (`#2316`_) |
|
|
|
:attr:`~views.View.provide_automatic_options` is set in |
|
|
|
|
|
|
|
:meth:`~views.View.as_view`, to be detected by |
|
|
|
|
|
|
|
:meth:`~Flask.add_url_rule`. (`#2316`_) |
|
|
|
- Error handling will try handlers registered for ``blueprint, code``, |
|
|
|
- Error handling will try handlers registered for ``blueprint, code``, |
|
|
|
``app, code``, ``blueprint, exception``, ``app, exception``. (`#2314`_) |
|
|
|
``app, code``, ``blueprint, exception``, ``app, exception``. |
|
|
|
- ``Cookie`` is added to the response's ``Vary`` header if the session is |
|
|
|
(`#2314`_) |
|
|
|
accessed at all during the request (and it wasn't deleted). (`#2288`_) |
|
|
|
- ``Cookie`` is added to the response's ``Vary`` header if the session |
|
|
|
- ``app.test_request_context()`` take ``subdomain`` and ``url_scheme`` |
|
|
|
is accessed at all during the request (and not deleted). (`#2288`_) |
|
|
|
parameters for use when building base URL. (`#1621`_) |
|
|
|
- :meth:`~Flask.test_request_context` accepts ``subdomain`` and |
|
|
|
- Set ``APPLICATION_ROOT = '/'`` by default. This was already the implicit |
|
|
|
``url_scheme`` arguments for use when building the base URL. |
|
|
|
default when it was set to ``None``. |
|
|
|
(`#1621`_) |
|
|
|
- ``TRAP_BAD_REQUEST_ERRORS`` is enabled by default in debug mode. |
|
|
|
- Set :data:`APPLICATION_ROOT` to ``'/'`` by default. This was already |
|
|
|
``BadRequestKeyError`` has a message with the bad key in debug mode instead |
|
|
|
the implicit default when it was set to ``None``. |
|
|
|
of the generic bad request message. (`#2348`_) |
|
|
|
- :data:`TRAP_BAD_REQUEST_ERRORS` is enabled by default in debug mode. |
|
|
|
- Allow registering new tags with ``TaggedJSONSerializer`` to support |
|
|
|
``BadRequestKeyError`` has a message with the bad key in debug mode |
|
|
|
storing other types in the session cookie. (`#2352`_) |
|
|
|
instead of the generic bad request message. (`#2348`_) |
|
|
|
- Only open the session if the request has not been pushed onto the context |
|
|
|
- Allow registering new tags with |
|
|
|
stack yet. This allows ``stream_with_context`` generators to access the same |
|
|
|
:class:`~json.tag.TaggedJSONSerializer` to support storing other types |
|
|
|
session that the containing view uses. (`#2354`_) |
|
|
|
in the session cookie. (`#2352`_) |
|
|
|
- Add ``json`` keyword argument for the test client request methods. This will |
|
|
|
- Only open the session if the request has not been pushed onto the |
|
|
|
dump the given object as JSON and set the appropriate content type. |
|
|
|
context stack yet. This allows :func:`~stream_with_context` |
|
|
|
(`#2358`_) |
|
|
|
generators to access the same session that the containing view uses. |
|
|
|
- Extract JSON handling to a mixin applied to both the request and response |
|
|
|
(`#2354`_) |
|
|
|
classes used by Flask. This adds the ``is_json`` and ``get_json`` methods to |
|
|
|
- Add ``json`` keyword argument for the test client request methods. |
|
|
|
the response to make testing JSON response much easier. (`#2358`_) |
|
|
|
This will dump the given object as JSON and set the appropriate |
|
|
|
- Removed error handler caching because it caused unexpected results for some |
|
|
|
content type. (`#2358`_) |
|
|
|
exception inheritance hierarchies. Register handlers explicitly for each |
|
|
|
- Extract JSON handling to a mixin applied to both the :class:`Request` |
|
|
|
exception if you don't want to traverse the MRO. (`#2362`_) |
|
|
|
and :class:`Response` classes. This adds the :meth:`~Response.is_json` |
|
|
|
|
|
|
|
and :meth:`~Response.get_json` methods to the response to make testing |
|
|
|
|
|
|
|
JSON response much easier. (`#2358`_) |
|
|
|
|
|
|
|
- Removed error handler caching because it caused unexpected results for |
|
|
|
|
|
|
|
some exception inheritance hierarchies. Register handlers explicitly |
|
|
|
|
|
|
|
for each exception if you want to avoid traversing the MRO. (`#2362`_) |
|
|
|
- Fix incorrect JSON encoding of aware, non-UTC datetimes. (`#2374`_) |
|
|
|
- Fix incorrect JSON encoding of aware, non-UTC datetimes. (`#2374`_) |
|
|
|
- Template auto reloading will honor the ``run`` command's ``debug`` flag even |
|
|
|
- Template auto reloading will honor debug mode even even if |
|
|
|
if ``app.jinja_env`` was already accessed. (`#2373`_) |
|
|
|
:attr:`~Flask.jinja_env` was already accessed. (`#2373`_) |
|
|
|
- The following old deprecated code was removed. (`#2385`_) |
|
|
|
- The following old deprecated code was removed. (`#2385`_) |
|
|
|
|
|
|
|
|
|
|
|
- ``flask.ext`` - import extensions directly by their name instead of |
|
|
|
- ``flask.ext`` - import extensions directly by their name instead of |
|
|
|
through the ``flask.ext`` namespace. For example, |
|
|
|
through the ``flask.ext`` namespace. For example, |
|
|
|
``import flask.ext.sqlalchemy`` becomes ``import flask_sqlalchemy``. |
|
|
|
``import flask.ext.sqlalchemy`` becomes ``import flask_sqlalchemy``. |
|
|
|
- ``Flask.init_jinja_globals`` - extend ``Flask.create_jinja_environment`` |
|
|
|
- ``Flask.init_jinja_globals`` - extend |
|
|
|
instead. |
|
|
|
:meth:`Flask.create_jinja_environment` instead. |
|
|
|
- ``Flask.error_handlers`` - tracked by ``Flask.error_handler_spec``, |
|
|
|
- ``Flask.error_handlers`` - tracked by |
|
|
|
use ``@app.errorhandler`` to register handlers. |
|
|
|
:attr:`Flask.error_handler_spec`, use :meth:`Flask.errorhandler` to |
|
|
|
- ``Flask.request_globals_class`` - use ``Flask.app_ctx_globals_class`` |
|
|
|
register handlers. |
|
|
|
instead. |
|
|
|
- ``Flask.request_globals_class`` - use |
|
|
|
- ``Flask.static_path`` - use ``Flask.static_url_path`` instead. |
|
|
|
:attr:`Flask.app_ctx_globals_class` instead. |
|
|
|
- ``Request.module`` - use ``Request.blueprint`` instead. |
|
|
|
- ``Flask.static_path`` - use :attr:`Flask.static_url_path` instead. |
|
|
|
|
|
|
|
- ``Request.module`` - use :attr:`Request.blueprint` instead. |
|
|
|
- The ``request.json`` property is no longer deprecated. (`#1421`_) |
|
|
|
|
|
|
|
- Support passing an existing ``EnvironBuilder`` or ``dict`` to |
|
|
|
- The :attr:`Request.json` property is no longer deprecated. (`#1421`_) |
|
|
|
``test_client.open``. (`#2412`_) |
|
|
|
- Support passing a :class:`~werkzeug.test.EnvironBuilder` or |
|
|
|
- The ``flask`` command and ``app.run`` will load environment variables using |
|
|
|
``dict`` to :meth:`test_client.open <werkzeug.test.Client.open>`. |
|
|
|
from ``.env`` and ``.flaskenv`` files if python-dotenv is installed. |
|
|
|
(`#2412`_) |
|
|
|
(`#2416`_) |
|
|
|
- The ``flask`` command and :meth:`Flask.run` will load environment |
|
|
|
- When passing a full URL to the test client, use the scheme in the URL instead |
|
|
|
variables from ``.env`` and ``.flaskenv`` files if python-dotenv is |
|
|
|
of the ``PREFERRED_URL_SCHEME``. (`#2430`_) |
|
|
|
installed. (`#2416`_) |
|
|
|
- ``app.logger`` has been simplified. ``LOGGER_NAME`` and |
|
|
|
- When passing a full URL to the test client, the scheme in the URL is |
|
|
|
``LOGGER_HANDLER_POLICY`` config was removed. The logger is always named |
|
|
|
used instead of :data:`PREFERRED_URL_SCHEME`. (`#2430`_) |
|
|
|
``flask.app``. The level is only set on first access, it doesn't check |
|
|
|
- :attr:`Flask.logger` has been simplified. ``LOGGER_NAME`` and |
|
|
|
``app.debug`` each time. Only one format is used, not different ones |
|
|
|
``LOGGER_HANDLER_POLICY`` config was removed. The logger is always |
|
|
|
depending on ``app.debug``. No handlers are removed, and a handler is only |
|
|
|
named ``flask.app``. The level is only set on first access, it doesn't |
|
|
|
added if no handlers are already configured. (`#2436`_) |
|
|
|
check :attr:`Flask.debug` each time. Only one format is used, not |
|
|
|
- Blueprint view function name may not contain dots. (`#2450`_) |
|
|
|
different ones depending on :attr:`Flask.debug`. No handlers are |
|
|
|
- Fix a ``ValueError`` caused by invalid Range requests in some cases. |
|
|
|
removed, and a handler is only added if no handlers are already |
|
|
|
(`#2526`_) |
|
|
|
configured. (`#2436`_) |
|
|
|
- The dev server now uses threads by default. (`#2529`_) |
|
|
|
- Blueprint view function names may not contain dots. (`#2450`_) |
|
|
|
- Loading config files with ``silent=True`` will ignore ``ENOTDIR`` |
|
|
|
- Fix a ``ValueError`` caused by invalid ``Range`` requests in some |
|
|
|
errors. (`#2581`_) |
|
|
|
cases. (`#2526`_) |
|
|
|
|
|
|
|
- The development server uses threads by default. (`#2529`_) |
|
|
|
|
|
|
|
- Loading config files with ``silent=True`` will ignore |
|
|
|
|
|
|
|
:data:`~errno.ENOTDIR` errors. (`#2581`_) |
|
|
|
- Pass ``--cert`` and ``--key`` options to ``flask run`` to run the |
|
|
|
- Pass ``--cert`` and ``--key`` options to ``flask run`` to run the |
|
|
|
development server over HTTPS. (`#2606`_) |
|
|
|
development server over HTTPS. (`#2606`_) |
|
|
|
- Added :data:`SESSION_COOKIE_SAMESITE` to control the ``SameSite`` |
|
|
|
- Added :data:`SESSION_COOKIE_SAMESITE` to control the ``SameSite`` |
|
|
@ -127,6 +141,7 @@ unreleased |
|
|
|
.. _pallets/meta#24: https://github.com/pallets/meta/issues/24 |
|
|
|
.. _pallets/meta#24: https://github.com/pallets/meta/issues/24 |
|
|
|
.. _#1421: https://github.com/pallets/flask/issues/1421 |
|
|
|
.. _#1421: https://github.com/pallets/flask/issues/1421 |
|
|
|
.. _#1489: https://github.com/pallets/flask/pull/1489 |
|
|
|
.. _#1489: https://github.com/pallets/flask/pull/1489 |
|
|
|
|
|
|
|
.. _#1559: https://github.com/pallets/flask/issues/1559 |
|
|
|
.. _#1621: https://github.com/pallets/flask/pull/1621 |
|
|
|
.. _#1621: https://github.com/pallets/flask/pull/1621 |
|
|
|
.. _#1898: https://github.com/pallets/flask/pull/1898 |
|
|
|
.. _#1898: https://github.com/pallets/flask/pull/1898 |
|
|
|
.. _#1936: https://github.com/pallets/flask/pull/1936 |
|
|
|
.. _#1936: https://github.com/pallets/flask/pull/1936 |
|
|
|