Flask v2.0.0 Release Notes
-
๐ Released 2021-05-11
- ๐ Drop support for Python 2 and 3.5.
- Bump minimum versions of other Pallets projects: Werkzeug >= 2, Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8. Be sure to check the change logs for each project. For better compatibility with other applications (e.g. Celery) that still require Click 7, there is no hard dependency on Click 8 yet, but using Click 7 will trigger a DeprecationWarning and Flask 2.1 will depend on Click 8.
- ๐ JSON support no longer uses simplejson. To use another JSON module,
override
app.json_encoder
andjson_decoder
. :issue:3555
- ๐ The
encoding
option to JSON functions is deprecated. :pr:3562
- ๐ Passing
script_info
to app factory functions is deprecated. This was not portable outside theflask
command. Useclick.get_current_context().obj
if it's needed. :issue:3552
- ๐ The CLI shows better error messages when the app failed to load
when looking up commands. :issue:
2741
- Add :meth:
sessions.SessionInterface.get_cookie_name
to allow setting the session cookie name dynamically. :pr:3369
- Add :meth:
Config.from_file
to load config using arbitrary file loaders, such astoml.load
orjson.load
. :meth:Config.from_json
is deprecated in favor of this. :pr:3398
- The
flask run
command will only defer errors on reload. Errors present during the initial call will cause the server to exit with the traceback immediately. :issue:3431
- :func:
send_file
raises a :exc:ValueError
when passed an :mod:io
object in text mode. Previously, it would respond with 200 OK and an empty file. :issue:3358
- When using ad-hoc certificates, check for the cryptography library
instead of PyOpenSSL. :pr:
3492
- When specifying a factory function with
FLASK_APP
, keyword argument can be passed. :issue:3553
- When loading a
.env
or.flaskenv
file, the current working directory is no longer changed to the location of the file. :pr:3560
- When returning a
(response, headers)
tuple from a view, the headers replace rather than extend existing headers on the response. For example, this allows setting theContent-Type
forjsonify()
. Useresponse.headers.extend()
if extending is desired. :issue:3628
- The
Scaffold
class provides a common API for theFlask
andBlueprint
classes.Blueprint
information is stored in attributes just likeFlask
, rather than opaque lambda functions. This is intended to improve consistency and maintainability. :issue:3215
- Include
samesite
andsecure
options when removing the session cookie. :pr:3726
- ๐ Support passing a
pathlib.Path
tostatic_folder
. :pr:3579
-
send_file
andsend_from_directory
are wrappers around the implementations inwerkzeug.utils
. :pr:3828
- Some
send_file
parameters have been renamed, the old names are deprecated.attachment_filename
is renamed todownload_name
.cache_timeout
is renamed tomax_age
.add_etags
is renamed toetag
. :pr:3828, 3883
-
send_file
passesdownload_name
even ifas_attachment=False
by usingContent-Disposition: inline
. :pr:3828
-
send_file
setsconditional=True
andmax_age=None
by default.Cache-Control
is set tono-cache
ifmax_age
is not set, otherwisepublic
. This tells browsers to validate conditional requests instead of using a timed cache. :pr:3828
- ๐
helpers.safe_join
is deprecated. Usewerkzeug.utils.safe_join
instead. :pr:3828
- The request context does route matching before opening the session.
This could allow a session interface to change behavior based on
request.endpoint
. :issue:3776
- Use Jinja's implementation of the
|tojson
filter. :issue:3881
- Add route decorators for common HTTP methods. For example,
@app.post("/login")
is a shortcut for@app.route("/login", methods=["POST"])
. :pr:3907
- ๐ Support async views, error handlers, before and after request, and
teardown functions. :pr:
3412
- ๐จ Support nesting blueprints. :issue:
593, 1548
, :pr:3923
- 0๏ธโฃ Set the default encoding to "UTF-8" when loading
.env
and.flaskenv
files to allow to use non-ASCII characters. :issue:3931
- 0๏ธโฃ
flask shell
sets up tab and history completion like the defaultpython
shell ifreadline
is installed. :issue:3941
- ๐
helpers.total_seconds()
is deprecated. Usetimedelta.total_seconds()
instead. :pr:3962
- Add type hinting. :pr:
3973
.