Changelog History
Page 1
-
v1.1.2
🚀 Unreleased
- ↪ Work around an issue when running the
flask
command with an external debugger on Windows. :issue:3297
- ↪ Work around an issue when running the
-
v1.1.1
🚀 Released 2019-07-08
- The
flask.json_available
flag was added back for compatibility with some extensions. It will raise a deprecation warning when used, and will be removed in version 2.0.0. :issue:3288
- The
-
v1.1.0
🚀 Released 2019-07-04
- Bump minimum Werkzeug version to >= 0.15.
- 👍 Drop support for Python 3.4.
Error handlers for
InternalServerError
or500
will always be passed an instance ofInternalServerError
. If they are invoked due to an unhandled exception, that original exception is now available ase.original_exception
rather than being passed directly to the handler. The same is true if the handler is for the baseHTTPException
. This makes error handler behavior more consistent. :pr:3266
- :meth:
Flask.finalize_request
is called for all unhandled exceptions even if there is no500
error handler.
- :meth:
:attr:
Flask.logger
takes the same name as :attr:Flask.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. :issue:2866
:meth:
flask.RequestContext.copy
includes the current session object in the request context copy. This preventssession
pointing to an out-of-date object. :issue:2935
🖨 Using built-in RequestContext, unprintable Unicode characters in Host header will result in a HTTP 400 response and not HTTP 500 as previously. :pr:
2994
👍 :func:
send_file
supports :class:~os.PathLike
objects as described in PEP 0519, to support :mod:pathlib
in Python 3. :pr:3059
👍 :func:
send_file
supports :class:~io.BytesIO
partial content. :issue:2957
:func:
open_resource
accepts the "rt" file mode. This still does the same thing as "r". :issue:3163
The :attr:
MethodView.methods
attribute set in a base class is used by subclasses. :issue:3138
:attr:
Flask.jinja_options
is adict
instead of anImmutableDict
to allow easier configuration. Changes must still be made before creating the environment. :pr:3190
Flask's
JSONMixin
for the request and response wrappers was moved into Werkzeug. Use Werkzeug's version with Flask-specific support. This bumps the Werkzeug dependency to >= 0.15. :issue:3125
The
flask
command entry point is simplified to take advantage of Werkzeug 0.15's better reloader support. This bumps the Werkzeug dependency to >= 0.15. :issue:3022
Support
static_url_path
that ends with a forward slash. :issue:3134
👍 Support empty
static_folder
without requiring setting an emptystatic_url_path
as well. :pr:3124
👍 :meth:
jsonify
supports :class:dataclasses.dataclass
objects. :pr:3195
Allow customizing the :attr:
Flask.url_map_class
used for routing. :pr:3069
The development server port can be set to 0, which tells the OS to pick an available port. :issue:
2926
The return value from :meth:
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. :issue:2937
🚦 Signaling support has a stub for the
connect_via
method when the Blinker library is not installed. :pr:3208
Add an
--extra-files
option to theflask run
CLI command to specify extra files that will trigger the reloader on change. :issue:2897
Allow returning a dictionary from a view function. Similar to how returning a string will produce a
text/html
response, returning a dict will calljsonify
to produce aapplication/json
response. :pr:3111
🖨 Blueprints have a
cli
Click group likeapp.cli
. CLI commands registered with a blueprint will be available as a group under theflask
command. :issue:1357
.✅ When using the test client as a context manager (
with client:
), all preserved request contexts are popped when the block exits, ensuring nested contexts are cleaned up correctly. :pr:3157
👍 Show a better error message when the view return type is not supported. :issue:
3214
✅
flask.testing.make_test_environ_builder()
has been deprecated in favour of a new classflask.testing.EnvironBuilder
. :pr:3232
The
flask run
command no longer fails if Python is not built with SSL support. Using the--cert
option will show an appropriate error message. :issue:3211
URL matching now occurs after the request context is pushed, rather than when it's created. This allows custom URL converters to access the app and request contexts, such as to query a database for an id. :issue:
3088
-
v1.0.4
🚀 Released 2019-07-04
- The key information for
BadRequestKeyError
is no longer cleared outside debug mode, so error handlers can still access it. This requires upgrading to Werkzeug 0.15.5. :issue:3249
-
send_file
url quotes the ":" and "/" characters for more compatible UTF-8 filename support in some browsers. :issue:3074
- ✅ Fixes for PEP451 import loaders and pytest 5.x. :issue:
3275
- Show message about dotenv on stderr instead of stdout. :issue:
3285
- The key information for
-
v1.0.3
🚀 Released 2019-05-17
- :func:
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. :issue:2766
- Allow custom CLIs using
FlaskGroup
to set the debug flag without it always being overwritten based on environment variables. :pr:2765
-
flask --version
outputs Werkzeug's version and simplifies the Python version. :pr:2825
- :func:
send_file
handles anattachment_filename
that is a native Python 2 string (bytes) with UTF-8 coded bytes. :issue:2933
- A catch-all error handler registered for
HTTPException
will not handleRoutingException
, which is used internally during routing. This fixes the unexpected behavior that had been introduced in 1.0. :pr:2986
- ✅ Passing the
json
argument toapp.test_client
does not push/pop an extra app context. :issue:2900
- :func:
-
v1.0.2
🚀 Released 2018-05-02
- 🔀 Fix more backwards compatibility issues with merging slashes between
a blueprint prefix and route. :pr:
2748
- Fix error with
flask routes
command when there are no routes. :issue:2751
- 🔀 Fix more backwards compatibility issues with merging slashes between
a blueprint prefix and route. :pr:
-
v1.0.1
🚀 Released 2018-04-29
- Fix registering partials (with no
__name__
) as view functions. :pr:2730
- Don't treat lists returned from view functions the same as tuples.
Only tuples are interpreted as response data. :issue:
2736
- 🖨 Extra slashes between a blueprint's
url_prefix
and a route URL are merged. This fixes some backwards compatibility issues with the change in 1.0. :issue:2731
, :issue:2742
- Only trap
BadRequestKeyError
errors in debug mode, not allBadRequest
errors. This allowsabort(400)
to continue working as expected. :issue:2735
- The
FLASK_SKIP_DOTENV
environment variable can be set to1
to skip automatically loading dotenv files. :issue:2722
- Fix registering partials (with no
-
v1.0
🚀 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
toFalse
. :func:~json.jsonify
returns a compact format by default, and an indented format in debug mode. :pr:2193
- :meth:
Flask.__init__ <Flask>
accepts thehost_matching
argument and sets it on :attr:~Flask.url_map
. :issue:1559
- :meth:
Flask.__init__ <Flask>
accepts thestatic_host
argument and passes it as thehost
argument when defining the static route. :issue:1559
- 👍 :func:
send_file
supports Unicode inattachment_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 theprovide_automatic_options
argument to disable adding theOPTIONS
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
raisesTypeError
instead ofValueError
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 throughSERVER_NAME
. :pr:2282
- Auto-detect zero-argument app factory called
create_app
ormake_app
fromFLASK_APP
. :pr:2297
- Factory 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
, the :class:~cli.ScriptInfo
object will be passed. :pr:2319
-
FLASK_APP
can be set to an app factory, with arguments if needed, for exampleFLASK_APP=myproject.app:create_app('dev')
. :pr:2326
- 📦
FLASK_APP
can point to local packages that are not installed in editable mode, althoughpip 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'sVary
header if the session is accessed at all during the request (and not deleted). :pr:2288
- :meth:
~Flask.test_request_context
acceptssubdomain
andurl_scheme
arguments for use when building the base URL. :pr:1621
- 0️⃣ Set :data:
APPLICATION_ROOT
to'/'
by default. This was already the implicit default when it was set toNone
. - :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 theflask.ext
namespace. For example,import flask.ext.sqlalchemy
becomesimport 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
ordict
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
andLOGGER_HANDLER_POLICY
config was removed. The logger is always namedflask.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 invalidRange
requests in some cases. :issue:2526
0️⃣ 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 toflask run
to run the development server over HTTPS. :pr:2606
Added :data:
SESSION_COOKIE_SAMESITE
to control theSameSite
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
0️⃣ Subdomain matching is disabled by default and setting :data:
SERVER_NAME
does not implicitly enable it. It can be enabled by passingsubdomain_matching=True
to theFlask
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 whensilent
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
-
v0.12.4
🚀 Released 2018-04-29
- 📦 Repackage 0.12.3 to fix package layout issue. :issue:
2728
- 📦 Repackage 0.12.3 to fix package layout issue. :issue:
-
v0.12.3
🚀 Released 2018-04-26
- :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. :issue:2692
- ⚠ Fix a Python warning about imports when using
python -m flask
. :issue:2666
- Fix a
ValueError
caused by invalidRange
requests in some cases.
- :func: