更新日志

版本 3.1.1

未发布

  • 修复了 cli_runner.invoke 的类型提示。 #5645

版本 3.1.0

发布于 2024-11-13

  • 移除对 Python 3.8 的支持。 #5623

  • 更新最低依赖版本到最新的功能发布版本。Werkzeug >= 3.1, ItsDangerous >= 2.2, Blinker >= 1.9。 #5624,5633

  • 提供配置选项来控制自动 OPTIONS 响应。 #5496

  • Flask.open_resource/open_instance_resourceBlueprint.open_resource 接受一个 encoding 参数,用于在文本模式下打开时使用。 默认值为 utf-8#5504

  • Request.max_content_length 可以针对每个请求进行自定义,而不仅仅是通过 MAX_CONTENT_LENGTH 配置。 添加了 MAX_FORM_MEMORY_SIZEMAX_FORM_PARTS 配置。 在安全页面添加了关于资源限制的文档。 #5625

  • 添加对 Partitioned cookie 属性 (CHIPS) 的支持,使用 SESSION_COOKIE_PARTITIONED 配置。 #5472

  • -e path 优先于默认的 .env.flaskenv 文件。 load_dotenv 除了路径之外,还会加载默认文件,除非传递 load_defaults=False#5628

  • 支持使用 SECRET_KEY_FALLBACKS 配置进行密钥轮换,这是一个旧密钥列表,仍然可以用于取消签名。 扩展需要添加支持。 #5621

  • 修复了设置 host_matching=Truesubdomain_matching=False 如何与 SERVER_NAME 交互。 设置 SERVER_NAME 不再将请求限制为仅该域名。 #5553

  • 在路由期间检查 Request.trusted_hosts,并且可以通过 TRUSTED_HOSTS 配置进行设置。 #5636

版本 3.0.3

发布于 2024-04-07

  • 默认的 hashlib.sha1 可能在 FIPS 构建中不可用。 不要在导入时访问它,以便开发人员有时间更改默认设置。 #5448

  • 不要在 sansio scaffold 中初始化 cli 属性,而是在 Flask 具体类中初始化。 #5270

版本 3.0.2

发布于 2024-02-03

  • 修正了 jinja_loader 属性的类型。 #5388

  • 修复了 --extra-files--exclude-patterns CLI 选项的错误。 #5391

版本 3.0.1

发布于 2024-01-18

  • 修正了 send_filepath 参数的类型。 #5336

  • 修复了 flask run --key 选项的错误消息中的拼写错误。 #5344

  • 会话数据被取消标记,而不依赖于内置的 json.loads object_hook。 这允许其他不实现该功能的 JSON 提供程序。 #5381

  • 在使用 mypy strict 模式时,解决更多类型查找问题。 #5383

版本 3.0.0

发布于 2023-09-30

  • 移除先前已弃用的代码。 #5223

  • 弃用 __version__ 属性。 请改用功能检测或 importlib.metadata.version("flask")#5230

  • 重构代码,使 Flask (app) 和 Blueprint 类具有 Sans-IO 基类。 #5127

  • 允许 self 作为 url_for 的参数。 #5264

  • 需要 Werkzeug >= 3.0.0。

版本 2.3.3

发布于 2023-08-21

  • Python 3.12 兼容性。

  • 需要 Werkzeug >= 2.3.7。

  • 使用 flit_core 而不是 setuptools 作为构建后端。

  • 重构应用程序根路径和实例路径的确定方式。 #5160

版本 2.3.2

发布于 2023-05-01

  • 当访问、修改或刷新会话时,设置 Vary: Cookie 标头。

  • 更新 Werkzeug 要求为 >=2.3.3,以应用最近的错误修复。

版本 2.3.1

发布于 2023-04-25

  • 恢复已弃用的 from flask import Markup#5084

版本 2.3.0

发布于 2023-04-25

  • 移除对 Python 3.7 的支持。 #5072

  • 更新最低要求到最新版本:Werkzeug>=2.3.0, Jinja2>3.1.2, itsdangerous>=2.1.2, click>=8.1.3。

  • 移除先前已弃用的代码。 #4995

    • 已移除已弃用的 _app_ctx_stack_request_ctx_stack 对象的 pushpop 方法。 top 仍然存在,以便为扩展提供更多时间来更新,但它将被移除。

    • 已移除 FLASK_ENV 环境变量、ENV 配置键和 app.env 属性。

    • 已移除 app 上的 session_cookie_namesend_file_max_age_defaultuse_x_sendfilepropagate_exceptionstemplates_auto_reload 属性。

    • 已移除 JSON_AS_ASCIIJSON_SORT_KEYSJSONIFY_MIMETYPEJSONIFY_PRETTYPRINT_REGULAR 配置键。

    • 已移除 app.before_first_requestbp.before_app_first_request 装饰器。

    • 已移除 app 和 blueprint 上的 json_encoderjson_decoder 属性,以及相应的 json.JSONEncoderJSONDecoder 类。

    • 已移除 json.htmlsafe_dumpshtmlsafe_dump 函数。

    • 在注册蓝图后调用蓝图上的 setup 方法是一个错误,而不是警告。 #4997

  • flask 导入 escapeMarkup 已被弃用。 请直接从 markupsafe 导入它们。 #4996

  • 已弃用 app.got_first_request 属性。 #4997

  • 已弃用 locked_cached_property 装饰器。 如果需要锁定,请在装饰函数内部使用锁。 #4993

  • 信号始终可用。 blinker>=1.6.2 是必需的依赖项。 已弃用 signals_available 属性。 #5056

  • 信号支持 async 订阅者函数。 #5049

  • 移除可能导致请求短暂相互阻塞的锁的使用。 #4993

  • 使用带有 pyproject.toml 而不是 setup.cfg 的现代打包元数据。 #4947

  • 确保子域名应用于嵌套蓝图。 #4834

  • config.from_file 可以使用 text=False 来指示解析器需要二进制文件。 #4989

  • 如果使用空名称创建蓝图,则会引发 ValueError#5010

  • SESSION_COOKIE_DOMAIN 不会回退到 SERVER_NAME。 默认值是不设置域名,现代浏览器将其解释为精确匹配,而不是子域名匹配。 关于 localhost 和 IP 地址的警告也被移除。 #5051

  • 当使用域名匹配时,routes 命令会显示每个规则的 subdomainhost#5004

  • 使用延迟注释求值。 #5071

版本 2.2.5

发布于 2023-05-02

  • 更新以兼容 Werkzeug 2.3.3。

  • 当访问、修改或刷新会话时,设置 Vary: Cookie 标头。

版本 2.2.4

发布于 2023-04-25

  • 更新以兼容 Werkzeug 2.3。

版本 2.2.3

发布于 2023-02-15

  • 默认情况下,为 .svg 模板文件启用自动转义。 #4831

  • 修复了 template_folder 的类型,使其接受 pathlib.Path#4892

  • flask run 命令添加 --debug 选项。 #4777

版本 2.2.2

发布于 2022-08-08

  • 更新 Werkzeug 依赖到 >= 2.2.2。 这包括与新的更快路由器、标头解析和开发服务器相关的修复。 #4754

  • 修复了 app.env 的默认值为 "production"。 此属性仍然已弃用。 #4740

版本 2.2.1

发布于 2022-08-03

  • 设置或访问 json_encoderjson_decoder 会引发弃用警告。 #4732

版本 2.2.0

发布于 2022-08-01

  • 移除先前已弃用的代码。 #4667

    • 已移除一些 send_file 参数的旧名称。 download_name 替换 attachment_filenamemax_age 替换 cache_timeoutetag 替换 add_etags。 此外,path 替换 send_from_directory 中的 filename

    • 已移除返回 AppContext.gRequestContext.g 属性。

  • 更新 Werkzeug 依赖到 >= 2.2。

  • 应用程序和请求上下文直接使用 Python 上下文变量而不是 Werkzeug 的 LocalStack 进行管理。 这应该会带来更好的性能和内存使用。 #4682

    • 扩展维护者请注意,_app_ctx_stack.top_request_ctx_stack.top 已被弃用。 请使用唯一前缀将数据存储在 g 上,例如 g._extension_name_attr

  • 已弃用 FLASK_ENV 环境变量和 app.env 属性,移除了开发模式和调试模式之间的区别。 调试模式应直接使用 --debug 选项或 app.run(debug=True) 进行控制。 #4714

  • 已弃用 app 上代理配置键的一些属性:session_cookie_namesend_file_max_age_defaultuse_x_sendfilepropagate_exceptionstemplates_auto_reload。 请改用相关的配置键。 #4716

  • Flask app 对象添加了新的自定义点,用于许多以前的全局行为。

    • flask.url_for 将调用 app.url_for#4568

    • flask.abort 将调用 app.aborterFlask.aborter_classFlask.make_aborter 可用于自定义此 aborter。 #4567

    • flask.redirect 将调用 app.redirect#4569

    • flask.jsonJSONProvider 的实例。 可以设置不同的提供程序以使用不同的 JSON 库。flask.jsonify 将调用 app.json.responseflask.json 中的其他函数将调用 app.json 中的相应函数。 #4692

  • JSON 配置已移动到默认 app.json 提供程序上的属性。JSON_AS_ASCIIJSON_SORT_KEYSJSONIFY_MIMETYPEJSONIFY_PRETTYPRINT_REGULAR 已被弃用。 #4692

  • 在 app 或 blueprint 上设置自定义 json_encoderjson_decoder 类,以及相应的 json.JSONEncoderJSONDecoder 类已被弃用。 现在可以使用 app.json 提供程序接口覆盖 JSON 行为。 #4692

  • json.htmlsafe_dumpsjson.htmlsafe_dump 已被弃用,该功能现在内置于 Jinja 中。 #4692

  • 重构 register_error_handler 以整合错误检查。 重写了一些错误消息,使其更加一致。 #4559

  • 在注册蓝图后,使用蓝图装饰器和旨在进行设置的函数将显示警告。 在下一个版本中,这将像应用程序 setup 方法一样成为错误。 #4571

  • before_first_request 已被弃用。 请在创建应用程序时运行 setup 代码。 #4605

  • 添加了 View.init_every_request 类属性。 如果视图子类将其设置为 False,则视图不会在每个请求上创建新实例。 #2520

  • flask.cli.FlaskGroup Click 组可以作为子命令嵌套在自定义 CLI 中。 #3263

  • flask CLI 添加 --app--debug 选项,而不是要求通过环境变量设置它们。 #2836

  • flask CLI 添加 --env-file 选项。 这允许指定一个 dotenv 文件,除了 .env.flaskenv 之外加载。 #3108

  • 不再需要在 app.cliblueprint.cli 上使用 @with_appcontext 装饰自定义 CLI 命令,此时应用程序上下文已经处于活动状态。 #2410

  • SessionInterface.get_expiration_time 使用时区感知值。 #4645

  • 视图函数可以直接返回生成器,而无需将它们包装在 Response 中。 #4629

  • 添加 stream_templatestream_template_string 函数,以将模板呈现为片段流。 #4629

  • 调试和测试期间上下文保留的新实现。 #4666

    • 当在交互式调试器控制台中运行代码时,requestg 和其他上下文本地对象指向正确的数据。 #2836

    • Teardown 函数始终在请求结束时运行,即使上下文被保留也是如此。 它们也在保留的上下文弹出后运行。

    • stream_with_context 将上下文与 with client 块分开保留。 它将在调用 response.get_data()response.close() 时清理。

  • 允许从视图函数返回列表,以像字典一样将其转换为 JSON 响应。 #4672

  • 当进行类型检查时,允许从视图函数返回 TypedDict#4695

  • flask run 命令中移除 --eager-loading/--lazy-loading 选项。 应用程序始终在第一次被 eager 加载,然后在 reloader 中被 lazy 加载。 reloader 始终立即打印错误,但继续服务。 移除先前实现使用的内部 DispatchingApp 中间件。 #4715

版本 2.1.3

发布于 2022-07-13

  • 内联一些仅用于某些 CLI 命令的可选导入。 #4606

  • 放宽 after_request 函数的类型注解。 #4600

  • 命名空间包的 instance_path 使用最接近导入的子模块的路径。 #4610

  • 当在应用程序上下文之外使用 render_templaterender_template_string 时,提供更清晰的错误消息。 #4693

版本 2.1.2

发布于 2022-04-28

  • 修复了 json.loads 的类型注解,它接受 str 或 bytes。 #4519

  • 可以按任意顺序给出 flask run 上的 --cert--key 选项。 #4459

版本 2.1.1

发布于 2022-03-30

  • 将 importlib_metadata 的最低要求版本设置为 3.6.0,这是 Python < 3.10 上必需的版本。 #4502

版本 2.1.0

发布于 2022-03-28

  • 移除对 Python 3.6 的支持。 #4335

  • 更新 Click 依赖到 >= 8.0。 #4008

  • 移除之前已弃用的代码。 #4337

    • CLI 不再传递 script_info 到应用工厂函数。

    • config.from_jsonconfig.from_file(name, load=json.load) 替代。

    • json 函数不再接受 encoding 参数。

    • safe_join 已移除,请使用 werkzeug.utils.safe_join 代替。

    • total_seconds 已移除,请使用 timedelta.total_seconds 代替。

    • 同一个蓝图不能使用相同的名称注册。注册时请使用 name= 来指定唯一的名称。

    • 测试客户端的 as_tuple 参数已移除。请使用 response.request.environ 代替。 #4417

  • send_filesend_from_directory 中的一些参数在 2.0 版本中被重命名。旧名称的弃用期延长至 2.2 版本。请务必在显示弃用警告的情况下进行测试。

    • attachment_filename 重命名为 download_name

    • cache_timeout 重命名为 max_age

    • add_etags 重命名为 etag

    • filename 重命名为 path

  • RequestContext.g 属性已弃用。请直接使用 gAppContext.g 代替。 #3898

  • copy_current_request_context 可以装饰异步函数。 #4303

  • CLI 使用 importlib.metadata 而不是 pkg_resources 来加载命令入口点。 #4419

  • 覆盖 FlaskClient.open 不会在重定向时导致错误。 #3396

  • flask run CLI 命令添加 --exclude-patterns 选项,以指定重新加载器将忽略的模式。 #4188

  • 当使用惰性加载(调试器默认设置)时,来自 flask run 命令的 Click 上下文在加载器线程中仍然可用。 #4460

  • 删除会话 cookie 使用 httponly 标志。 #4485

  • 放宽 errorhandler 的类型限制,允许用户使用更精确的类型并多次装饰同一个函数。 #4095, 4295, 4297

  • 修复 __exit__ 方法的类型,以更好地兼容 ExitStack#4474

  • 来自 Werkzeug,对于重定向响应,默认情况下 Location 标头 URL 将保持相对,并排除 scheme 和 domain。 #4496

  • 添加 Config.from_prefixed_env() 以从以 FLASK_ 或其他前缀开头的环境变量加载配置值。默认情况下,这会将值解析为 JSON,并允许在嵌套字典中设置键。 #4479

版本 2.0.3

发布于 2022-02-14

  • 测试客户端的 as_tuple 参数已弃用,并将在 Werkzeug 2.1 中移除。现在它也在 Flask 中被弃用,将在 Flask 2.1 中移除,但在 2.0.x 版本中仍然兼容。请使用 response.request.environ 代替。 #4341

  • 修复 errorhandler 装饰器的类型注解。 #4295

  • 恢复了 CLI 的一项更改,该更改导致在导入应用程序时隐藏 ImportError 回溯。 #4307

  • app.json_encoderjson_decoder 仅在它们具有自定义行为时才传递给 dumpsloads。这提高了性能,主要是在 PyPy 上。 #4349

  • 当在请求上下文之外使用 after_this_request 时,显示更清晰的错误消息。 #4333

版本 2.0.2

发布于 2021-10-04

  • 修复 teardown_* 方法的类型注解。 #4093

  • 修复 before_requestbefore_app_request 装饰器的类型注解。 #4104

  • 修复了类型检查要求模板全局装饰器接受无参数函数的问题。 #4098

  • 支持带有异步处理程序的 View 和 MethodView 实例。 #4112

  • 增强 app.errorhandler 装饰器的类型检查。 #4095

  • 修复了使用不同名称注册两次蓝图的问题。 #4124

  • 修复了 static_folder 的类型,使其接受 pathlib.Path#4150

  • jsonify 通过编码为 str 来处理 decimal.Decimal#4157

  • 正确处理 CLI 惰性加载中引发的延迟错误。 #4096

  • CLI 加载器处理 create_app 函数中的 **kwargs#4170

  • 修复了 before_request 和在视图返回之前触发的其他回调的顺序。它们从应用程序向下调用到最内层的嵌套蓝图。 #4229

版本 2.0.1

发布于 2021-05-21

  • 重新添加 send_from_directory 中的 filename 参数。filename 参数已重命名为 path,旧名称已弃用。 #4019

  • 将顶层名称标记为已导出,以便类型检查理解用户项目中的导入。 #4024

  • 修复 g 的类型注解,并告知 mypy 它是一个具有任意属性的命名空间对象。 #4020

  • 修复 Python 3.6.0 中不可用的一些类型。 #4040

  • 改进 send_filesend_from_directoryget_send_file_max_age 的类型检查。 #4044, #4026

  • 当蓝图名称包含点号时显示错误。. 具有特殊含义,它用于分隔(嵌套的)蓝图名称和端点名称。 #4041

  • 当嵌套使用 url_prefix 值创建的蓝图时,合并 URL 前缀。 #4037

  • 恢复了 URL 匹配顺序的更改。URL 再次在会话加载后进行匹配,因此会话在自定义 URL 转换器中可用。 #4053

  • 重新添加了已弃用的 Config.from_json,它被意外提前移除。 #4078

  • 改进了类型签名中使用 Callable 的一些函数的类型检查,重点是装饰器工厂。 #4060

  • 嵌套蓝图使用它们的点状名称注册。这允许具有相同名称的不同蓝图嵌套在不同的位置。 #4069

  • register_blueprint 接受 name 选项来更改蓝图注册时使用的(前点状)名称。这允许同一个蓝图多次注册,并为 url_for 提供唯一的名称。不建议使用相同的名称多次注册同一个蓝图。 #1091

  • 改进 stream_with_context 的类型检查。 #4052

版本 2.0.0

发布于 2021-05-11

  • 移除对 Python 2 和 3.5 的支持。

  • 提升其他 Pallets 项目的最低版本要求:Werkzeug >= 2, Jinja2 >= 3, MarkupSafe >= 2, ItsDangerous >= 2, Click >= 8。请务必查看每个项目的变更日志。为了更好地兼容仍然需要 Click 7 的其他应用程序(例如 Celery),目前还没有对 Click 8 的硬性依赖,但使用 Click 7 将触发 DeprecationWarning,并且 Flask 2.1 将依赖于 Click 8。

  • JSON 支持不再使用 simplejson。要使用另一个 JSON 模块,请覆盖 app.json_encoderjson_decoder#3555

  • JSON 函数的 encoding 选项已弃用。 #3562

  • 不建议将 script_info 传递给应用程序工厂函数。这在 flask 命令之外是不可移植的。如果需要,请使用 click.get_current_context().obj#3552

  • 当查找命令时,如果应用程序加载失败,CLI 会显示更好的错误消息。 #2741

  • 添加 SessionInterface.get_cookie_name 以允许动态设置会话 cookie 名称。 #3369

  • 添加 Config.from_file 以使用任意文件加载器(例如 toml.loadjson.load)加载配置。Config.from_json 已弃用,推荐使用此方法代替。 #3398

  • flask run 命令仅在重新加载时延迟错误。初始调用期间出现的错误将导致服务器立即退出并显示回溯。 #3431

  • 当以文本模式传递 io 对象时,send_file 会引发 ValueError。以前,它会响应 200 OK 和一个空文件。 #3358

  • 当使用 ad-hoc 证书时,检查 cryptography 库而不是 PyOpenSSL。 #3492

  • 当使用 FLASK_APP 指定工厂函数时,可以传递关键字参数。 #3553

  • 当加载 .env.flaskenv 文件时,当前工作目录不再更改为文件所在的位置。 #3560

  • 当从视图返回 (response, headers) 元组时,标头会替换而不是扩展响应上的现有标头。例如,这允许为 jsonify() 设置 Content-Type。如果需要扩展,请使用 response.headers.extend()#3628

  • Scaffold 类为 FlaskBlueprint 类提供了通用的 API。Blueprint 信息像 Flask 一样存储在属性中,而不是不透明的 lambda 函数中。这旨在提高一致性和可维护性。 #3215

  • 删除会话 cookie 时,包含 samesitesecure 选项。 #3726

  • 支持将 pathlib.Path 传递给 static_folder#3579

  • send_filesend_from_directory 是对 werkzeug.utils 中实现的包装。 #3828

  • send_file 的一些参数已被重命名,旧名称已弃用。attachment_filename 重命名为 download_namecache_timeout 重命名为 max_ageadd_etags 重命名为 etag#3828, 3883

  • send_file 即使 as_attachment=False 也通过使用 Content-Disposition: inline 来传递 download_name#3828

  • send_file 默认设置 conditional=Truemax_age=None。如果未设置 max_age,则 Cache-Control 设置为 no-cache,否则设置为 public。这告诉浏览器验证条件请求,而不是使用定时缓存。 #3828

  • helpers.safe_join 已弃用。请使用 werkzeug.utils.safe_join 代替。 #3828

  • 请求上下文在打开会话之前执行路由匹配。这可能允许会话接口根据 request.endpoint 更改行为。 #3776

  • 使用 Jinja 的 |tojson 过滤器实现。 #3881

  • 为常见的 HTTP 方法添加路由装饰器。例如,@app.post("/login")@app.route("/login", methods=["POST"]) 的快捷方式。 #3907

  • 支持异步视图、错误处理程序、请求前和请求后函数以及拆卸函数。 #3412

  • 支持嵌套蓝图。 #593, 1548, #3923

  • 加载 .env.flaskenv 文件时,将默认编码设置为“UTF-8”,以允许使用非 ASCII 字符。 #3931

  • 如果安装了 readlineflask shell 会像默认的 python shell 一样设置制表符和历史记录补全。 #3941

  • helpers.total_seconds() 已弃用。请使用 timedelta.total_seconds() 代替。 #3962

  • 添加类型提示。 #3973

版本 1.1.4

发布于 2021-05-13

  • 更新 static_folder 以使用 _compat.fspath 而不是 os.fspath,以继续支持 Python < 3.6 #4050

版本 1.1.3

发布于 2021-05-13

  • 设置 Werkzeug、Jinja、Click 和 ItsDangerous 的最大版本。 #4043

  • 重新添加对为 static_folder 传递 pathlib.Path 的支持。 #3579

版本 1.1.2

发布于 2020-04-03

  • 解决在 Windows 上使用外部调试器运行 flask 命令时出现的问题。 #3297

  • 如果 Flask static_folder 参数以斜杠结尾,则静态路由将不会捕获所有 URL。 #3452

版本 1.1.1

发布于 2019-07-08

  • 为了与某些扩展兼容,重新添加了 flask.json_available 标志。使用时会引发弃用警告,并将在 2.0.0 版本中移除。 #3288

版本 1.1.0

发布于 2019-07-04

  • 将 Werkzeug 最低版本提升至 >= 0.15。

  • 移除对 Python 3.4 的支持。

  • 对于 InternalServerError500 的错误处理程序,始终会传递 InternalServerError 的实例。如果由于未处理的异常而调用它们,则原始异常现在作为 e.original_exception 提供,而不是直接传递给处理程序。如果处理程序用于基本 HTTPException,则情况也是如此。这使得错误处理程序的行为更加一致。 #3266

    • 即使没有 500 错误处理程序,也会为所有未处理的异常调用 Flask.finalize_request

  • Flask.logger 使用与 Flask.name 相同的名称(作为 Flask(import_name) 传递的值)。这恢复了 1.0 版本始终记录到 "flask.app" 的行为,以便在同一进程中支持多个应用程序。如果检测到需要移动的旧配置,将显示警告。 #2866

  • RequestContext.copy 在请求上下文副本中包含当前会话对象。这可以防止 session 指向过时的对象。 #2935

  • 使用内置的 RequestContext,Host 标头中不可打印的 Unicode 字符将导致 HTTP 400 响应,而不是之前的 HTTP 500。 #2994

  • send_file 支持 PEP 519 中描述的 PathLike 对象,以支持 Python 3 中的 pathlib#3059

  • send_file 支持 BytesIO 部分内容。 #2957

  • open_resource 接受 “rt” 文件模式。这仍然与 “r” 执行相同的操作。 #3163

  • 子类使用基类中设置的 MethodView.methods 属性。 #3138

  • Flask.jinja_options 是一个 dict 而不是 ImmutableDict,以便更轻松地进行配置。更改仍然必须在创建环境之前进行。 #3190

  • Flask 的请求和响应包装器的 JSONMixin 已移至 Werkzeug。使用 Werkzeug 版本,并提供 Flask 特定的支持。这会将 Werkzeug 依赖项提升至 >= 0.15。 #3125

  • 简化了 flask 命令入口点,以利用 Werkzeug 0.15 更好的重新加载器支持。这会将 Werkzeug 依赖项提升至 >= 0.15。 #3022

  • 支持以正斜杠结尾的 static_url_path#3134

  • 支持空的 static_folder,而无需设置空的 static_url_path#3124

  • jsonify 支持 dataclass 对象。 #3195

  • 允许自定义用于路由的 Flask.url_map_class#3069

  • 开发服务器端口可以设置为 0,这将告诉操作系统选择一个可用的端口。 #2926

  • cli.load_dotenv 的返回值与文档更加一致。如果未安装 python-dotenv,或者给定路径不是文件,它将返回 False#2937

  • 当未安装 Blinker 库时,信号支持具有 connect_via 方法的存根。 #3208

  • flask run CLI 命令添加 --extra-files 选项,以指定更改时将触发重新加载器的额外文件。 #2897

  • 允许从视图函数返回字典。类似于返回字符串将生成 text/html 响应的方式,返回字典将调用 jsonify 以生成 application/json 响应。 #3111

  • 蓝图具有像 app.cli 一样的 cli Click 组。使用蓝图注册的 CLI 命令将作为 flask 命令下的一个组提供。 #1357

  • 当将测试客户端用作上下文管理器(with client:)时,当代码块退出时,所有保留的请求上下文都会被弹出,确保正确清理嵌套的上下文。 #3157

  • 当视图返回类型不受支持时,显示更好的错误消息。 #3214

  • flask.testing.make_test_environ_builder() 已弃用,推荐使用新类 flask.testing.EnvironBuilder#3232

  • 如果 Python 未构建 SSL 支持,flask run 命令不再失败。使用 --cert 选项将显示适当的错误消息。 #3211

  • URL 匹配现在在请求上下文被推送之后发生,而不是在创建时发生。这允许自定义 URL 转换器访问应用程序和请求上下文,例如查询数据库以获取 id。 #3088

版本 1.0.4

发布于 2019-07-04

  • BadRequestKeyError 的关键信息不再在调试模式之外清除,因此错误处理程序仍然可以访问它。这需要升级到 Werkzeug 0.15.5。 #3249

  • send_file url 引用 “:” 和 “/” 字符,以便在某些浏览器中提供更兼容的 UTF-8 文件名支持。 #3074

  • 修复了 PEP 451 导入加载器和 pytest 5.x 的问题。 #3275

  • 在 stderr 而不是 stdout 上显示关于 dotenv 的消息。 #3285

版本 1.0.3

发布于 2019-05-17

  • send_file 将文件名编码为 ASCII 而不是 Latin-1 (ISO-8859-1)。这修复了与 Gunicorn 的兼容性问题,Gunicorn 对标头编码的要求比 PEP 3333 更严格。#2766

  • 允许使用 FlaskGroup 的自定义 CLI 设置 debug 标志,而不会总是基于环境变量被覆盖。#2765

  • flask --version 输出 Werkzeug 的版本并简化 Python 版本。#2825

  • send_file 处理作为原生 Python 2 字符串(字节)且使用 UTF-8 编码字节的 attachment_filename#2933

  • HTTPException 注册的 catch-all 错误处理程序将不会处理 RoutingException,后者在路由期间在内部使用。这修复了 1.0 中引入的意外行为。#2986

  • json 参数传递给 app.test_client 不会推送/弹出额外的应用上下文。#2900

版本 1.0.2

发布于 2018-05-02

  • 修复了蓝图前缀和路由之间合并斜杠时更多的向后兼容性问题。#2748

  • 修复了当没有路由时 flask routes 命令的错误。#2751

版本 1.0.1

发布于 2018-04-29

  • 修复了将 partials(没有 __name__)注册为视图函数的问题。#2730

  • 不要将从视图函数返回的列表与元组同等对待。只有元组才被解释为响应数据。#2736

  • 蓝图的 url_prefix 和路由 URL 之间的额外斜杠被合并。这修复了 1.0 版本更改的一些向后兼容性问题。#2731, #2742

  • 仅在调试模式下捕获 BadRequestKeyError 错误,而不是所有 BadRequest 错误。这允许 abort(400) 继续按预期工作。#2735

  • 可以将 FLASK_SKIP_DOTENV 环境变量设置为 1 以跳过自动加载 dotenv 文件。#2722

版本 1.0

发布于 2018-04-26

  • 不再支持 Python 2.6 和 3.3。

  • 将最低依赖版本提升到最新的稳定版本:Werkzeug >= 0.14, Jinja >= 2.10, itsdangerous >= 0.24, Click >= 5.1。#2586

  • 从命令行运行 Flask 应用程序时,跳过 app.run。这避免了一些令人困惑的调试行为。

  • JSONIFY_PRETTYPRINT_REGULAR 的默认值更改为 False~json.jsonify 默认返回紧凑格式,调试模式下返回缩进格式。#2193

  • Flask.__init__ 接受 host_matching 参数并在 Flask.url_map 上设置它。#1559

  • Flask.__init__ 接受 static_host 参数,并在定义静态路由时将其作为 host 参数传递。#1559

  • send_file 支持 attachment_filename 中的 Unicode。#2223

  • _scheme 参数从 url_for 传递到 Flask.handle_url_build_error#2017

  • Flask.add_url_rule 接受 provide_automatic_options 参数以禁用添加 OPTIONS 方法。#1489

  • MethodView 子类从基类继承方法处理程序。#1936

  • 在请求开始时打开会话时发生的错误由应用程序的错误处理程序处理。#2254

  • 蓝图获得了 Blueprint.json_encoderBlueprint.json_decoder 属性,以覆盖应用程序的编码器和解码器。#1898

  • Flask.make_response 对于错误的响应类型,引发 TypeError 而不是 ValueError。错误消息已得到改进,以描述类型无效的原因。#2256

  • 添加 routes CLI 命令以输出在应用程序上注册的路由。#2259

  • 当会话 cookie 域是裸主机名或 IP 地址时显示警告,因为这些可能在某些浏览器(如 Chrome)中无法正常工作。#2282

  • 允许 IP 地址作为精确的会话 cookie 域。#2282

  • 如果通过 SERVER_NAME 检测到 SESSION_COOKIE_DOMAIN,则会设置它。#2282

  • FLASK_APP 自动检测名为 create_appmake_app 的零参数应用程序工厂。#2297

  • 工厂函数不需要接受 script_info 参数即可与 flask 命令一起使用。如果它们接受单个参数或名为 script_info 的参数,则将传递 ScriptInfo 对象。#2319

  • FLASK_APP 可以设置为应用程序工厂,如果需要,可以带有参数,例如 FLASK_APP=myproject.app:create_app('dev')#2326

  • FLASK_APP 可以指向未以可编辑模式安装的本地包,尽管仍然首选 pip install -e#2414

  • View 类属性 View.provide_automatic_optionsView.as_view 中设置,以便被 Flask.add_url_rule 检测到。#2316

  • 错误处理将尝试为 blueprint, code, app, code, blueprint, exception, app, exception 注册的处理程序。#2314

  • 如果在请求期间访问了会话(且未删除),则 Cookie 将添加到响应的 Vary 标头中。#2288

  • Flask.test_request_context 接受 subdomainurl_scheme 参数,以便在构建基本 URL 时使用。#1621

  • 默认情况下,将 APPLICATION_ROOT 设置为 '/'。当它设置为 None 时,这已经是隐式默认值。

  • 默认情况下,在调试模式下启用 TRAP_BAD_REQUEST_ERRORSBadRequestKeyError 在调试模式下具有包含错误键的消息,而不是通用的错误请求消息。#2348

  • 允许使用 TaggedJSONSerializer 注册新标签,以支持在会话 cookie 中存储其他类型。#2352

  • 仅当请求尚未推送到上下文堆栈时才打开会话。这允许 stream_with_context 生成器访问包含视图使用的相同会话。#2354

  • 为测试客户端请求方法添加 json 关键字参数。这将把给定的对象转储为 JSON 并设置适当的内容类型。#2358

  • 将 JSON 处理提取到应用于 RequestResponse 类的 mixin 中。这为响应添加了 Response.is_jsonResponse.get_json 方法,使测试 JSON 响应更加容易。#2358

  • 删除了错误处理程序缓存,因为它为某些异常继承层次结构导致了意外的结果。如果想要避免遍历 MRO,请为每个异常显式注册处理程序。#2362

  • 修复了对感知的非 UTC 日期时间进行不正确的 JSON 编码的问题。#2374

  • 即使已访问 Flask.jinja_env,模板自动重新加载也将遵循调试模式。#2373

  • 以下旧的已弃用代码已被删除。#2385

    • flask.ext - 直接通过扩展名称导入扩展,而不是通过 flask.ext 命名空间。例如,import flask.ext.sqlalchemy 变为 import flask_sqlalchemy

    • Flask.init_jinja_globals - 扩展 Flask.create_jinja_environment 代替。

    • Flask.error_handlers - 由 Flask.error_handler_spec 跟踪,使用 Flask.errorhandler 注册处理程序。

    • Flask.request_globals_class - 使用 Flask.app_ctx_globals_class 代替。

    • Flask.static_path - 使用 Flask.static_url_path 代替。

    • Request.module - 使用 Request.blueprint 代替。

  • Request.json 属性不再被弃用。#1421

  • 支持将 EnvironBuilderdict 传递给 test_client.open#2412

  • flask 命令和 Flask.run 将从 .env.flaskenv 文件加载环境变量(如果已安装 python-dotenv)。#2416

  • 当将完整 URL 传递给测试客户端时,将使用 URL 中的 scheme,而不是 PREFERRED_URL_SCHEME#2430

  • Flask.logger 已简化。LOGGER_NAMELOGGER_HANDLER_POLICY 配置已被删除。记录器始终命名为 flask.app。级别仅在首次访问时设置,它不会每次都检查 Flask.debug。仅使用一种格式,而不是根据 Flask.debug 使用不同的格式。不会删除任何处理程序,并且仅当尚未配置任何处理程序时才添加处理程序。#2436

  • 蓝图视图函数名称可能不包含点。#2450

  • 修复了由某些情况下的无效 Range 请求引起的 ValueError#2526

  • 开发服务器默认使用线程。#2529

  • 使用 silent=True 加载配置文件将忽略 ENOTDIR 错误。#2581

  • --cert--key 选项传递给 flask run 以通过 HTTPS 运行开发服务器。#2606

  • 添加了 SESSION_COOKIE_SAMESITE 以控制会话 cookie 上的 SameSite 属性。#2607

  • 添加了 Flask.test_cli_runner 以创建一个 Click runner,它可以调用 Flask CLI 命令进行测试。#2636

  • 子域名匹配默认禁用,设置 SERVER_NAME 不会隐式启用它。可以通过将 subdomain_matching=True 传递给 Flask 构造函数来启用它。#2635

  • 当蓝图注册到应用程序时,会从蓝图 url_prefix 中剥离单个尾部斜杠。#2629

  • silent 为 true 时,Request.get_json 不会缓存解析失败的结果。#2651

  • Request.get_json 不再接受任意编码。传入的 JSON 应根据 RFC 8259 使用 UTF-8 编码,但 Flask 将自动检测 UTF-8、-16 或 -32。#2691

  • 添加了 MAX_COOKIE_SIZEResponse.max_cookie_size 以控制 Werkzeug 何时警告浏览器可能忽略的大 cookies。#2693

  • 更新了文档主题,使文档在小窗口中看起来更好。#2709

  • 重写了教程文档和示例项目,采用更结构化的方法来帮助新用户避免常见的陷阱。#2676

版本 0.12.5

发布于 2020-02-10

  • 将 Werkzeug 锁定到 < 1.0.0。#3497

版本 0.12.4

发布于 2018-04-29

  • 重新打包 0.12.3 以修复包布局问题。#2728

版本 0.12.3

发布于 2018-04-26

  • Request.get_json 不再接受任意编码。传入的 JSON 应根据 RFC 8259 使用 UTF-8 编码,但 Flask 将自动检测 UTF-8、-16 或 -32。#2692

  • 修复了使用 python -m flask 时关于导入的 Python 警告。#2666

  • 修复了由某些情况下的无效 Range 请求引起的 ValueError

版本 0.12.2

发布于 2017-05-16

  • 修复了 Windows 上 safe_join 中的错误。

版本 0.12.1

发布于 2017-03-31

  • 防止当导入的应用程序模块中发生 ImportError 时,flask run 显示 NoAppException

  • 修复了 Python 3 中 app.config.from_pyfile 的编码行为。#2118

  • 如果 SERVER_NAME 配置存在,则将其用作 app.run 的默认值。#2109, #2152

  • 在请求处理程序中引发 BaseException(例如 KeyboardInterrupt)的情况下,使用异常对象而不是 None 调用 ctx.auto_pop

版本 0.12

发布于 2016-12-21,代号 Punsch

  • cli 命令现在响应 --version

  • 已删除 send_file 中类文件对象的文件类型猜测和 ETag 生成。#104, :pr`1849`

  • send_file 中的文件类型猜测现在会明确失败,并且不会回退到 application/octet-stream#1988

  • 使 flask.safe_join 能够像 os.path.join 一样连接多个路径 #1730

  • 恢复了一个行为更改,该更改使开发服务器崩溃而不是返回内部服务器错误。#2006

  • 正确调用常规请求调度以及错误处理程序的响应处理程序。

  • 默认禁用应用程序记录器的记录器传播。

  • send_file 中添加对范围请求的支持。

  • app.test_client 包含预设的默认环境,现在可以直接设置,而不是每个 client.get 设置。

  • 修复了在 PyPy3 下运行时崩溃的问题。#1814

版本 0.11.1

发布于 2016-06-07

  • 修复了一个阻止 FLASK_APP=foobar/__init__.py 工作的错误。#1872

版本 0.11

发布于 2016-05-29,代号 Absinthe

  • 添加了对将顶层数组序列化到 jsonify 的支持。这在旧浏览器中引入了安全风险。

  • 添加了 before_render_template 信号。

  • Flask.test_client 添加了 **kwargs,以支持将额外的关键字参数传递给 Flask.test_client_class 的构造函数。

  • 添加了 SESSION_REFRESH_EACH_REQUEST 配置键,用于控制 set-cookie 行为。如果设置为 True,则永久会话将在每次请求时刷新并延长其生命周期;如果设置为 False,则仅当会话实际修改时才会修改。非永久会话不受此影响,并且总是在浏览器窗口关闭时过期。

  • 使 Flask 支持传入数据的自定义 JSON mimetype。

  • 添加了对从视图函数返回 (response, headers) 形式的元组的支持。

  • 添加了 Config.from_json

  • 添加了 Flask.config_class

  • 添加了 Config.get_namespace

  • 模板不再在调试模式之外自动重新加载。这可以使用新的 TEMPLATES_AUTO_RELOAD 配置键进行配置。

  • 为 Python 3.3 的命名空间加载器中的限制添加了解决方法。

  • 在使用 Python 3.3 的命名空间包时,添加了对显式根路径的支持。

  • 添加了 flaskflask.cli 模块,以通过 click CLI 系统启动本地调试服务器。建议使用此方法代替旧的 flask.run() 方法,因为它由于不同的设计而工作更快、更可靠,并且还取代了 Flask-Script

  • 现在首先检查与特定类匹配的错误处理程序,从而允许捕获作为 HTTP 异常子类的异常(在 werkzeug.exceptions 中)。这使扩展作者可以创建默认情况下会导致他们选择的 HTTP 错误的异常,但如果需要,可以使用自定义错误处理程序捕获它们。

  • 添加了 Config.from_mapping

  • 即使禁用调试,Flask 现在也会默认记录日志。日志格式现在是硬编码的,但可以通过 LOGGER_HANDLER_POLICY 配置键禁用默认日志处理。

  • 删除了已弃用的模块功能。

  • 添加了 EXPLAIN_TEMPLATE_LOADING 配置标志,启用后,它将指示 Flask 解释它是如何定位模板的。这应该有助于用户在加载错误的模板时进行调试。

  • 强制执行蓝图处理,按照它们为模板加载注册的顺序。

  • 将测试套件移植到 py.test。

  • 弃用了 request.json,推荐使用 request.get_json()

  • 在 jsonify() 方法中添加了 “pretty” 和 “compressed” 分隔符定义。当 JSONIFY_PRETTYPRINT_REGULAR=False 时,通过删除默认情况下在分隔符后包含的不必要的空格来减小 JSON 响应大小。

  • JSON 响应现在以换行符结尾,因为这是 UNIX 文本文件以换行符结尾的约定,并且某些客户端在缺少此换行符时处理不佳。#1262

  • 如果用户使用小写版本 options 注册了覆盖规则,则自动提供的 OPTIONS 方法现在已正确禁用。#1288

  • flask.json.jsonify 现在支持 datetime.date 类型。#1326

  • 不要将已捕获异常的异常信息泄漏到上下文拆卸处理程序。#1393

  • 允许自定义 Jinja 环境子类。#1422

  • 更新了扩展开发指南。

  • flask.g 现在具有 pop()setdefault 方法。

  • 默认情况下为 flask.templating.render_template_string 启用自动转义。#1515

  • flask.ext 现在已弃用。#1484

  • 如果服务器操作系统上的文件名无效,send_from_directory 现在会引发 BadRequest。#1763

  • 添加了 JSONIFY_MIMETYPE 配置变量。#1728

  • 拆卸处理期间的异常将不再留下不良的应用程序上下文。

  • 修复了损坏的 test_appcontext_signals() 测试用例。

  • helpers.find_package 中引发 AttributeError 异常,并附带一条有用的消息,解释了当使用 PEP 302 导入钩子但没有 is_package() 方法时,为什么会引发此异常。

  • 修复了在进入请求或应用上下文之前引发的异常会被传递给 teardown 处理程序的问题。

  • 修复了当请求绝对 URL 时,查询参数从测试客户端的请求中移除的问题。

  • @before_first_request 改为预期中的装饰器。

  • 修复了发送带有文件名的文件流时的 etags 错误。

  • 修复了 send_from_directory 未正确扩展到应用程序根路径的问题。

  • 更改了首次请求前处理程序的逻辑,以便在调用后翻转标志。这将允许一些可能危险但可能应该允许的用法。

  • 修复了 Python 3 错误,即当 app.url_build_error_handlers 中的处理程序重新引发 BuildError 时。

版本 0.10.1

发布于 2013-06-14

  • 修复了 |tojson 未引用单引号的问题,这使得过滤器在 HTML 属性中无法正常工作。现在可以在单引号属性中使用该过滤器。这应该使将该过滤器与 angular.js 一起使用更容易。

  • 重新为会话系统添加了对字节字符串的支持。这打破了与人们将二进制数据用于令牌验证放入会话中的常见情况的兼容性。

  • 修复了为同一端点注册相同方法两次会错误地触发异常的问题。

版本 0.10

发布于 2013-06-13,代号 Limoncello

  • 将默认 cookie 序列化格式从 pickle 更改为 JSON,以限制攻击者在密钥泄露时可能造成的影响。

  • 除了已有的 template_filter 方法族之外,还添加了 template_test 方法。

  • 除了已有的 template_filter 方法族之外,还添加了 template_global 方法。

  • 为 x-sendfile 设置了 content-length 标头。

  • tojson 过滤器现在不会转义 HTML5 解析器中的脚本块。

  • 模板中使用的 tojson 默认是安全的。这是由于不同的转义行为而允许的。

  • 如果您尝试在已使用的端点上注册新函数,Flask 现在会引发错误。

  • 在 simplejson 周围添加了包装器模块,并添加了 datetime 对象的默认序列化。这允许更轻松地自定义 Flask 或任何 Flask 扩展处理 JSON 的方式。

  • 删除了已弃用的内部 flask.session 模块别名。请使用 flask.sessions 来获取会话模块。这不应与会话代理 flask.session 混淆。

  • 现在可以在没有请求上下文的情况下渲染模板。行为略有不同,因为 requestsessiong 对象将不可用,并且蓝图的上下文处理器不会被调用。

  • 配置对象现在作为真正的全局变量而不是通过上下文处理器提供给模板,这使得它即使在导入的模板中也默认可用。

  • 添加了一个选项来生成非 ASCII 编码的 JSON,这应该减少网络传输的字节数。默认情况下禁用它,以避免与可能期望 flask.json.dumps 默认返回字节的现有库造成混淆。

  • flask.g 现在存储在应用上下文中,而不是请求上下文中。

  • flask.g 现在获得了一个 get() 方法,用于在不存在的项目上不会出错。

  • flask.g 现在可以与 in 运算符一起使用,以查看定义了什么,并且现在是可迭代的,并将产生所有存储的属性。

  • flask.Flask.request_globals_class 已重命名为 flask.Flask.app_ctx_globals_class,自从 0.10 以来,这是一个更好的名称来描述它的作用。

  • requestsessiong 现在也作为代理添加到模板上下文中,这使得它们在导入的模板中可用。但是,必须非常小心地使用它们,因为在宏之外使用可能会导致缓存。

  • 如果代理异常被传递,Flask 将不再调用错误的错误处理程序。

  • 为 chrome 在 localhost 中使用域名时 cookie 无法按预期工作添加了解决方法。

  • 更改了从会话中选择 cookie 值的默认值的逻辑,以更好地与 Google Chrome 配合使用。

  • 添加了 message_flashed 信号,简化了闪现消息的测试。

  • 添加了对复制请求上下文的支持,以便更好地与 greenlets 协同工作。

  • 删除了自定义 JSON HTTP 异常子类。如果您依赖它们,您可以自己重新引入它们。但是,强烈建议不要使用它们,因为接口存在缺陷。

  • Python 要求已更改:现在需要 Python 2.6 或 2.7 以准备 Python 3.3 端口。

  • 更改了 teardown 系统如何被告知异常的方式。如果在错误处理过程中间发生异常处理,现在这种方式更可靠。

  • 调试模式下的请求上下文保留现在保留了异常信息,这意味着 teardown 处理程序能够区分错误情况和成功情况。

  • 添加了 JSONIFY_PRETTYPRINT_REGULAR 配置变量。

  • Flask 现在默认按顺序排列 JSON 键,以避免由于不同工作进程之间的哈希种子不同而导致 HTTP 缓存失效。

  • 添加了 appcontext_pushedappcontext_popped 信号。

  • 内置的 run 方法现在在选择要运行的默认端口时考虑了 SERVER_NAME

  • 添加了 flask.request.get_json() 作为旧的 flask.request.json 属性的替代品。

版本 0.9

发布于 2012-07-01,代号 Campari

  • Request.on_json_loading_failed 现在默认返回 JSON 格式的响应。

  • url_for 函数现在可以生成指向生成链接的锚点。

  • url_for 函数现在还可以显式生成特定于给定 HTTP 方法的 URL 规则。

  • 仅当未显式设置时,Logger 现在才返回调试日志设置。

  • 在关闭请求时,取消注册 WSGI 环境和请求对象之间的循环依赖关系。这意味着在响应返回到 WSGI 服务器后,environ werkzeug.request 将为 None,但这具有以下优势:除非用户自己创建了循环依赖关系,否则在 CPython 上不需要垃圾回收器来拆除请求。

  • 会话现在在回调后存储,以便如果会话有效负载存储在会话中,您仍然可以在请求后回调中修改它。

  • Flask 类将避免导入提供的导入名称(必需的第一个参数),以使程序化构建 Flask 实例的工具受益。Flask 类将回退到在具有自定义模块钩子的系统(例如 Google App Engine)上使用导入,或者当导入名称位于 Python 2.7 之前的 zip 存档(通常是 egg)中时。

  • 蓝图现在有一个装饰器来添加应用程序范围的自定义模板过滤器,Blueprint.app_template_filter

  • Flask 和蓝图类现在有一个非装饰器方法来添加应用程序范围的自定义模板过滤器,Flask.add_template_filterBlueprint.add_app_template_filter

  • get_flashed_messages 函数现在允许通过 category_filter 参数在单独的块中渲染闪现消息类别。

  • Flask.run 方法现在接受 hostport 参数的 None,当 None 时使用默认值。这允许使用配置值调用 run,例如 app.run(app.config.get('MYHOST'), app.config.get('MYPORT')),无论是否提供配置文件,都具有正确的行为。

  • render_template 方法现在接受模板名称的可迭代对象或单个模板名称。以前,它只接受单个模板名称。在可迭代对象上,渲染找到的第一个模板。

  • 添加了 Flask.app_context,它的工作方式与请求上下文非常相似,但仅提供对当前应用程序的访问。这还增加了在没有活动请求上下文的情况下生成 URL 的支持。

  • 视图函数现在可以返回一个元组,其中第一个实例是 Response 的实例。这允许从视图函数返回 jsonify(error="error msg"), 400

  • FlaskBlueprint 现在提供 get_send_file_max_age 钩子,供子类覆盖使用 Flask.send_static_file(用于默认静态文件处理程序)和 helpers.send_file 时从 Flask 提供静态文件的行为。此钩子提供了一个文件名,例如,允许按文件扩展名更改缓存控制。send_file 和静态文件的默认最大年龄可以通过新的 SEND_FILE_MAX_AGE_DEFAULT 配置变量进行配置,该变量在默认的 get_send_file_max_age 实现中使用。

  • 修复了会话实现中的一个假设,该假设可能会破坏在使用外部存储的会话实现上的消息闪现。

  • 更改了函数返回元组值的行为。它们不再是响应对象的参数,现在它们具有明确的含义。

  • 添加了 Flask.request_globals_class,以允许在创建每个请求的 g 实例时使用特定的类。

  • 向视图函数添加了 required_methods 属性,以强制在注册时添加方法。

  • 添加了 flask.after_this_request

  • 添加了 flask.stream_with_context 以及多次推送上下文的能力,而不会产生意外行为。

版本 0.8.1

发布于 2012-07-01

  • 修复了未记录的 flask.session 模块在 Python 2.5 上无法正常工作的问题。不应使用它,但确实给软件包管理器带来了一些问题。

版本 0.8

发布于 2011-09-29,代号 Rakija

  • 将会话支持重构为会话接口,以便可以更改会话的实现,而无需覆盖 Flask 类。

  • 现在可以正确自动删除空会话 cookie。

  • 视图函数现在可以选择不获取自动 OPTIONS 实现。

  • 现在可以捕获 HTTP 异常和错误请求错误,以便它们在回溯中正常显示。

  • 调试模式下的 Flask 现在检测到一些常见问题,并尝试警告您。

  • 如果在处理第一个请求后附加了视图,调试模式下的 Flask 现在会发出断言错误。当用户忘记提前导入视图代码时,这会提供更早的反馈。

  • 添加了注册回调的能力,这些回调仅在第一个请求开始时触发一次,使用 Flask.before_first_request

  • 格式错误的 JSON 数据现在将触发错误请求 HTTP 异常,而不是通常会导致 500 内部服务器错误的 value error(如果未处理)。这是一个向后不兼容的更改。

  • 应用程序现在不仅有一个资源和模块所在的根路径,还有一个实例路径,它是放置在运行时修改的文件(上传等)的指定位置。此外,这在概念上仅依赖于实例,并且在版本控制之外,因此它是放置配置文件等的理想位置。

  • 添加了 APPLICATION_ROOT 配置变量。

  • 实现了 TestClient.session_transaction,以便从测试环境中轻松修改会话。

  • 在内部重构了测试客户端。APPLICATION_ROOT 配置变量以及 SERVER_NAME 现在被测试客户端正确用作默认值。

  • 添加了 View.decorators 以支持更简单地装饰可插拔(基于类)的视图。

  • 修复了与“with”语句一起使用时,测试客户端未触发 teardown 处理程序执行的问题。

  • 添加了对会话 cookie 参数的更精细控制。

  • 如果未实现处理程序,则对方法视图的 HEAD 请求现在会自动调度到 get 方法。

  • 实现了虚拟 flask.ext 包以从中导入扩展。

  • 异常时的上下文保留现在是 Flask 本身的组成部分,不再是测试客户端的一部分。这清理了一些内部逻辑,并降低了单元测试中失控请求上下文的几率。

  • 修复了 Jinja2 环境的 list_templates 方法在涉及蓝图或模块时未返回正确名称的问题。

版本 0.7.2

发布于 2011-07-06

  • 修复了 URL 处理器在蓝图上无法正常工作的问题。

版本 0.7.1

发布于 2011-06-29

  • 添加了丢失的 future 导入,该导入破坏了 2.5 兼容性。

  • 修复了蓝图的无限重定向问题。

版本 0.7

发布于 2011-06-28,代号 Grappa

  • 添加了 Flask.make_default_options_response,子类可以使用它来更改 OPTIONS 响应的默认行为。

  • 未绑定的局部变量现在引发正确的 RuntimeError,而不是 AttributeError

  • 基于文件对象猜测 mimetype 和 etag 支持在 send_file 中已被弃用,因为它不可靠。请传递文件名,或者附加您自己的 etag 并手动提供正确的 mimetype。

  • 模块的静态文件处理现在需要显式提供静态文件夹的名称。以前的自动检测不可靠,并且在 Google 的 App Engine 上引起了问题。在 1.0 之前,旧的行为将继续工作,但会发出依赖项警告。

  • 修复了 Flask 在 jython 上运行的问题。

  • 添加了 PROPAGATE_EXCEPTIONS 配置变量,该变量可用于翻转异常传播的设置,以前该设置仅链接到 DEBUG,现在链接到 DEBUGTESTING

  • Flask 不再在内部依赖于通过 add_url_rule 函数添加的规则,现在还可以接受添加到 url map 的常规 werkzeug 规则。

  • 向 flask 应用程序对象添加了 endpoint 方法,该方法允许使用装饰器向任意端点注册回调。

  • 静态文件发送使用 Last-Modified 而不是 0.6 中错误引入的 Date。

  • 添加了 create_jinja_loader 以覆盖加载器创建过程。

  • config.from_pyfile 实现了静默标志。

  • 添加了 teardown_request 装饰器,用于应在请求结束时运行的函数,无论是否发生异常。此外,更改了 after_request 的行为。现在,当引发异常时,不再执行它。

  • 实现了 has_request_context

  • 弃用了 init_jinja_globals。请覆盖 Flask.create_jinja_environment 方法以实现相同的功能。

  • 添加了 safe_join

  • 自动 JSON 请求数据解包现在查看 charset mimetype 参数。

  • 如果会话中没有消息,请勿在 get_flashed_messages 上修改会话。

  • before_request 处理程序现在能够中止带有错误的请求。

  • 可以定义用户异常处理程序。这样,您可以为请求处理期间可能发生的某些错误(例如数据库连接错误、来自远程资源的超时等)从中央枢纽提供自定义错误消息。

  • 蓝图可以提供蓝图特定的错误处理程序。

  • 实现了通用基于类的视图。

版本 0.6.1

发布于 2010-12-31

  • 修复了默认 OPTIONS 响应未在 Allow 标头中公开所有有效方法的问题。

  • Jinja2 模板加载语法现在允许在模板加载路径前面使用“./”。以前,这导致了模块设置的问题。

  • 修复了模块的子域设置被静态文件夹忽略的问题。

  • 修复了一个安全问题,该问题允许客户端下载任意文件,如果主机服务器是基于 Windows 的操作系统,并且客户端使用反斜杠来转义文件公开的目录。

版本 0.6

发布于 2010-07-27,代号 Whisky

  • 请求后函数现在以注册的相反顺序调用。

  • 除非应用程序显式添加“OPTIONS”作为 URL 规则的方法,否则 Flask 现在会自动实现 OPTIONS。在这种情况下,不会启动自动 OPTIONS 处理。

  • 即使模块没有静态文件夹,静态规则现在也已就位。实施此功能是为了帮助 GAE,如果静态文件夹是 .yml 文件中映射的一部分,则 GAE 将删除静态文件夹。

  • Flask.config 现在在模板中作为 config 可用。

  • 上下文处理器将不再覆盖直接传递给渲染函数的值。

  • 添加了使用新的 MAX_CONTENT_LENGTH 配置值限制传入请求数据的能力。

  • Module.add_url_rule 方法的端点现在是可选的,以便与应用程序对象上同名函数保持一致。

  • 添加了 make_response 函数,该函数简化了在视图中创建响应对象实例的过程。

  • 添加了基于 blinker 的信号支持。此功能当前是可选的,应该由扩展程序和应用程序使用。如果要使用它,请确保已安装 blinker

  • 重构了 URL 适配器的创建方式。现在可以使用 Flask.create_url_adapter 方法完全自定义此过程。

  • 模块现在可以注册子域而不是仅注册 URL 前缀。这使得将整个模块绑定到可配置的子域成为可能。

版本 0.5.2

发布于 2010-07-15

  • 修复了使用模块时从目录加载模板的另一个问题。

版本 0.5.1

发布于 2010-07-06

  • 修复了使用模块时从目录加载模板的问题。

版本 0.5

发布于 2010-07-06,代号 Calvados

  • 修复了由无法指定服务器名称引起的子域错误。服务器名称现在可以使用 SERVER_NAME 配置键设置。此键现在也用于设置跨子域范围的会话 cookie。

  • 自动转义不再对所有模板都处于活动状态。相反,它仅对 .html.htm.xml.xhtml 处于活动状态。可以在模板中使用 autoescape 标签更改此行为。

  • 在内部重构了 Flask。现在它由多个文件组成。

  • send_file 现在发出 etag,并具有内置执行条件响应的能力。

  • (暂时)放弃了对压缩应用程序的支持。这是一个很少使用的功能,并导致了一些令人困惑的行为。

  • 添加了对每个包的模板和静态文件目录的支持。

  • 删除了对 create_jinja_loader 的支持,由于改进的模块支持,该支持在 0.5 中不再使用。

  • 添加了一个帮助程序函数,用于从任何目录公开文件。

版本 0.4

发布于 2010-06-18,代号 Rakia

  • 添加了从模块注册应用程序范围的错误处理程序的功能。

  • 如果请求因异常而终止并且错误处理页面启动,则 Flask.after_request 处理程序现在也会被调用。

  • 测试客户端没有能力将请求上下文保留更长时间。这也可以用于触发不弹出请求堆栈以进行测试的自定义请求。

  • 由于 Python 标准库缓存记录器,因此现在可以配置记录器的名称,以更好地支持单元测试。

  • 添加了可以激活单元测试帮助程序的 TESTING 开关。

  • 如果启用了调试,则记录器现在切换到 DEBUG 模式。

版本 0.3.1

发布于 2010-05-28

  • 修复了 Config.from_envvar 的错误报告错误。

  • 删除了一些未使用的代码。

  • 版本不再包含开发遗留文件(主题的 .git 文件夹、zip 和 pdf 文件中内置的文档以及一些 .pyc 文件)

版本 0.3

发布于 2010-05-28,代号 Schnaps

  • 添加了闪现消息类别的支持。

  • 应用程序现在配置了一个 logging.Handler,并且在非调试模式下,会将请求处理异常记录到该记录器。这使得可以在服务器错误时接收邮件,例如。

  • 添加了对上下文绑定的支持,该绑定不需要使用 with 语句即可在控制台中播放。

  • 请求上下文现在在 with 语句中可用,从而可以进一步推送或弹出请求上下文。

  • 添加了对配置的支持。

版本 0.2

发布于 2010-05-12,代号 J?germeister

  • 各种错误修复

  • 集成了 JSON 支持

  • 添加了 get_template_attribute 帮助程序函数。

  • Flask.add_url_rule 现在还可以注册视图函数。

  • 重构了内部请求调度。

  • 服务器现在默认在 127.0.0.1 上侦听,以修复 chrome 的问题。

  • 添加了外部 URL 支持。

  • 添加了对 send_file 的支持。

  • 模块支持和内部请求处理重构,以更好地支持可插拔应用程序。

  • 现在可以在每个会话的基础上将会话设置为永久会话。

  • 改进了缺少密钥的错误报告。

  • 添加了对 Google Appengine 的支持。

版本 0.1

发布于 2010-04-16

  • 首次公开预览版。