-----------
Released 2018-04-26
- Python 2.6 and 3.3 are no longer supported.
- Bump minimum dependency versions to the latest stable versions:
Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1.
:issue:`2586`
- Skip :meth:`app.run <Flask.run>` when a Flask application is run
from the command line. This avoids some behavior that was confusing
to debug.
- Change the default for :data:`JSONIFY_PRETTYPRINT_REGULAR` to
``False``. :func:`~json.jsonify` returns a compact format by
default, and an indented format in debug mode. :pr:`2193`
- :meth:`Flask.__init__ <Flask>` accepts the ``host_matching``
argument and sets it on :attr:`~Flask.url_map`. :issue:`1559`
- :meth:`Flask.__init__ <Flask>` accepts the ``static_host`` argument
and passes it as the ``host`` argument when defining the static
route. :issue:`1559`
- :func:`send_file` supports Unicode in ``attachment_filename``.
:pr:`2223`
- Pass ``_scheme`` argument from :func:`url_for` to
:meth:`~Flask.handle_url_build_error`. :pr:`2017`
- :meth:`~Flask.add_url_rule` accepts the
``provide_automatic_options`` argument to disable adding the
``OPTIONS`` method. :pr:`1489`
- :class:`~views.MethodView` subclasses inherit method handlers from
base classes. :pr:`1936`
- Errors caused while opening the session at the beginning of the
request are handled by the app's error handlers. :pr:`2254`
- Blueprints gained :attr:`~Blueprint.json_encoder` and
:attr:`~Blueprint.json_decoder` attributes to override the app's
encoder and decoder. :pr:`1898`
- :meth:`Flask.make_response` raises ``TypeError`` instead of
``ValueError`` for bad response types. The error messages have been
improved to describe why the type is invalid. :pr:`2256`
- Add ``routes`` CLI command to output routes registered on the
application. :pr:`2259`
- 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. :pr:`2282`
- Allow IP address as exact session cookie domain. :pr:`2282`
- ``SESSION_COOKIE_DOMAIN`` is set if it is detected through
``SERVER_NAME``. :pr:`2282`
- Auto-detect zero-argument app factory called ``create_app`` or
``make_app`` from ``FLASK_APP``. :pr:`2297`
- Factory functions are not required to take a ``script_info``
parameter to work with the ``flask`` command. If they take a single
parameter or a parameter named ``script_info``, the
:class:`~cli.ScriptInfo` object will be passed. :pr:`2319`
- ``FLASK_APP`` can be set to an app factory, with arguments if
needed, for example ``FLASK_APP=myproject.app:create_app('dev')``.
:pr:`2326`
- ``FLASK_APP`` can point to local packages that are not installed in
editable mode, although ``pip install -e`` is still preferred.
:pr:`2414`
- The :class:`~views.View` class attribute
:attr:`~views.View.provide_automatic_options` is set in
:meth:`~views.View.as_view`, to be detected by
:meth:`~Flask.add_url_rule`. :pr:`2316`
- Error handling will try handlers registered for ``blueprint, code``,
``app, code``, ``blueprint, exception``, ``app, exception``.
:pr:`2314`
- ``Cookie`` is added to the response's ``Vary`` header if the session
is accessed at all during the request (and not deleted). :pr:`2288`
- :meth:`~Flask.test_request_context` accepts ``subdomain`` and
``url_scheme`` arguments for use when building the base URL.
:pr:`1621`
- Set :data:`APPLICATION_ROOT` to ``'/'`` by default. This was already
the implicit default when it was set to ``None``.
- :data:`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. :pr:`2348`
- Allow registering new tags with
:class:`~json.tag.TaggedJSONSerializer` to support storing other
types in the session cookie. :pr:`2352`
- Only open the session if the request has not been pushed onto the
context stack yet. This allows :func:`~stream_with_context`
generators to access the same session that the containing view uses.
:pr:`2354`
- Add ``json`` keyword argument for the test client request methods.
This will dump the given object as JSON and set the appropriate
content type. :pr:`2358`
- Extract JSON handling to a mixin applied to both the
:class:`Request` 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. :pr:`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. :pr:`2362`
- Fix incorrect JSON encoding of aware, non-UTC datetimes. :pr:`2374`
- Template auto reloading will honor debug mode even even if
:attr:`~Flask.jinja_env` was already accessed. :pr:`2373`
- The following old deprecated code was removed. :issue:`2385`
- ``flask.ext`` - import extensions directly by their name instead
of through the ``flask.ext`` namespace. For example,
``import flask.ext.sqlalchemy`` becomes
``import flask_sqlalchemy``.
- ``Flask.init_jinja_globals`` - extend
:meth:`Flask.create_jinja_environment` instead.
- ``Flask.error_handlers`` - tracked by
:attr:`Flask.error_handler_spec`, use :meth:`Flask.errorhandler`
to register handlers.
- ``Flask.request_globals_class`` - use
:attr:`Flask.app_ctx_globals_class` instead.
- ``Flask.static_path`` - use :attr:`Flask.static_url_path`
instead.
- ``Request.module`` - use :attr:`Request.blueprint` instead.
- The :attr:`Request.json` property is no longer deprecated.
:issue:`1421`
- Support passing a :class:`~werkzeug.test.EnvironBuilder` or ``dict``
to :meth:`test_client.open <werkzeug.test.Client.open>`. :pr:`2412`
- The ``flask`` command and :meth:`Flask.run` will load environment
variables from ``.env`` and ``.flaskenv`` files if python-dotenv is
installed. :pr:`2416`
- When passing a full URL to the test client, the scheme in the URL is
used instead of :data:`PREFERRED_URL_SCHEME`. :pr:`2430`
- :attr:`Flask.logger` has been simplified. ``LOGGER_NAME`` and
``LOGGER_HANDLER_POLICY`` config was removed. The logger is always
named ``flask.app``. The level is only set on first access, it
doesn't check :attr:`Flask.debug` each time. Only one format is
used, not different ones depending on :attr:`Flask.debug`. No
handlers are removed, and a handler is only added if no handlers are
already configured. :pr:`2436`
- Blueprint view function names may not contain dots. :pr:`2450`
- Fix a ``ValueError`` caused by invalid ``Range`` requests in some
cases. :issue:`2526`
- The development server uses threads by default. :pr:`2529`
- Loading config files with ``silent=True`` will ignore
:data:`~errno.ENOTDIR` errors. :pr:`2581`
- Pass ``--cert`` and ``--key`` options to ``flask run`` to run the
development server over HTTPS. :pr:`2606`
- Added :data:`SESSION_COOKIE_SAMESITE` to control the ``SameSite``
attribute on the session cookie. :pr:`2607`
- Added :meth:`~flask.Flask.test_cli_runner` to create a Click runner
that can invoke Flask CLI commands for testing. :pr:`2636`
- Subdomain matching is disabled by default and setting
:data:`SERVER_NAME` does not implicitly enable it. It can be enabled
by passing ``subdomain_matching=True`` to the ``Flask`` constructor.
:pr:`2635`
- A single trailing slash is stripped from the blueprint
``url_prefix`` when it is registered with the app. :pr:`2629`
- :meth:`Request.get_json` doesn't cache the result if parsing fails
when ``silent`` is true. :issue:`2651`
- :func:`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. :pr:`2691`
- Added :data:`MAX_COOKIE_SIZE` and :attr:`Response.max_cookie_size`
to control when Werkzeug warns about large cookies that browsers may
ignore. :pr:`2693`
- Updated documentation theme to make docs look better in small
windows. :pr:`2709`
- Rewrote the tutorial docs and example project to take a more
structured approach to help new users avoid common pitfalls.
:pr:`2676`