历史变更
Version 2.0.3
Unreleased
- The test client’s
as_tuple
parameter is deprecated and will be removed in Werkzeug 2.1. It is now also deprecated in Flask, to be removed in Flask 2.1, while remaining compatible with both in 2.0.x. 请改用response.request.environ
。 :pr:`4341` - Fix type annotation for
errorhandler
decorator. :issue:`4295` - Revert a change to the CLI that caused it to hide
ImportError
tracebacks when importing the application. :issue:`4307`
版本 2.0.2
发布 2021-10-04
- 修复
teardown_*
方法的类型注释。 :问题:`4093` - 修复
before_request
和before_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
,旧名称已弃用。 :pr:`4019` - 将顶级名称标记为导出,以便类型检查理解用户项目中的导入。 :问题:`4024`
- 修复
g
的类型注释并通知 mypy 它是一个具有任意属性的命名空间对象。 :问题:`4020` - 修复一些在 Python 3.6.0 中不可用的类型。 :问题:`4040`
- 改进
send_file
、send_from_directory
和get_send_file_max_age
的输入。 :issue:`4044`, :pr:`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 的支持。
- Bump 其他 Pallets 项目的最低版本:Werkzeug >= 2,Jinja2 >= 3,MarkupSafe >= 2,ItsDangerous >= 2,点击 >= 8。 请务必检查每个项目的更改日志。 为了更好地与其他应用程序兼容(例如 Celery)仍然需要 Click 7,目前还没有对 Click 8 的硬依赖,但使用 Click 7 会触发 DeprecationWarning,而 Flask 2.1 将依赖 Click 8。
- JSON 支持不再使用 simplejson。 要使用另一个 JSON 模块,请覆盖
app.json_encoder
和json_decoder
。 :问题:`3555` - JSON 函数的
encoding
选项已弃用。 :pr:`3562` - 不推荐将
script_info
传递给应用工厂函数。 这在flask
命令之外是不可移植的。 如果需要,请使用click.get_current_context().obj
。 :问题:`3552` - 当应用程序在查找命令时无法加载时,CLI 会显示更好的错误消息。 :问题:`2741`
- 添加
sessions.SessionInterface.get_cookie_name()
以允许动态设置会话 cookie 名称。 :pr:`3369` - 添加
Config.from_file()
以使用任意文件加载器加载配置,例如toml.load
或json.load
。Config.from_json()
已被弃用以支持此功能。 :pr:`3398` flask run
命令只会在重新加载时延迟错误。 初始调用期间出现的错误将导致服务器立即退出并进行回溯。 :问题:`3431`send_file()
在文本模式下传递io
对象时引发ValueError
。 以前,它会响应 200 OK 和一个空文件。 :问题:`3358`- 使用临时证书时,请检查加密库而不是 PyOpenSSL。 :pr:`3492`
- 当用
FLASK_APP
指定工厂函数时,可以传递关键字参数。 :问题:`3553` - 加载
.env
或.flaskenv
文件时,当前工作目录不再更改为文件所在的位置。 :pr:`3560` - 当从视图返回
(response, headers)
元组时,标头替换而不是扩展响应中的现有标头。 例如,这允许为jsonify()
设置Content-Type
。 如果需要扩展,请使用response.headers.extend()
。 :问题:`3628` Scaffold
类为Flask
和Blueprint
类提供了一个通用 API。Blueprint
信息像Flask
一样存储在属性中,而不是不透明的 lambda 函数。 这是为了提高一致性和可维护性。 :问题:`3215`- 删除会话 cookie 时包括
samesite
和secure
选项。 :pr:`3726` - 支持将
pathlib.Path
传递给static_folder
。 :pr:`3579` send_file
和send_from_directory
是werkzeug.utils
中实现的包装器。 :pr:`3828`- 一些
send_file
参数已重命名,旧名称已弃用。attachment_filename
更名为download_name
。cache_timeout
更名为max_age
。add_etags
更名为etag
。 :pr:`3828, 3883` send_file
通过download_name
即使as_attachment=False
使用Content-Disposition: inline
。 :pr:`3828`send_file
默认设置conditional=True
和max_age=None
。 如果未设置max_age
,则Cache-Control
设置为no-cache
,否则设置为public
。 这告诉浏览器验证条件请求而不是使用定时缓存。 :pr:`3828`helpers.safe_join
已弃用。 请改用werkzeug.utils.safe_join
。 :pr:`3828`- 请求上下文在打开会话之前进行路由匹配。 这可能允许会话界面基于
request.endpoint
更改行为。 :问题:`3776` - 使用 Jinja 的
|tojson
过滤器实现。 :问题:`3881` - 为常见的 HTTP 方法添加路由装饰器。 例如,
@app.post("/login")
是@app.route("/login", methods=["POST"])
的快捷方式。 :pr:`3907` - 支持异步视图、错误处理程序、请求前后和拆卸功能。 :pr:`3412`
- 支持嵌套蓝图。 :issue:`593, 1548`, :pr:`3923`
- 加载
.env
和.flaskenv
文件时,将默认编码设置为“UTF-8”,以允许使用非 ASCII 字符。 :问题:`3931` - 如果安装了
readline
,flask shell
会像默认的python
shell 一样设置选项卡和历史记录完成。 :问题:`3941` helpers.total_seconds()
已弃用。 请改用timedelta.total_seconds()
。 :pr:`3962`- 添加类型提示。 :pr:`3973`。
版本 1.1.3
发布 2021-05-13
- 设置 Werkzeug、Jinja、Click 和 ItsDangerous 的最大版本。 :问题:`4043`
- 重新添加对为
static_folder
传递pathlib.Path
的支持。 :pr:`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。
- 新增对Python3.4的支持。
InternalServerError
或500
的错误处理程序将始终传递一个InternalServerError
的实例。 如果由于未处理的异常而调用它们,则原始异常现在可作为e.original_exception
使用,而不是直接传递给处理程序。 如果处理程序用于基础HTTPException
,情况也是如此。 这使得错误处理程序的行为更加一致。 :pr:`3266`- 即使没有
500
错误处理程序,也会为所有未处理的异常调用Flask.finalize_request()
。
- 即使没有
Flask.logger
与Flask.name
同名(作为Flask(import_name)
传递的值。 这将恢复 1.0 始终登录到"flask.app"
的行为,以便在同一进程中支持多个应用程序。 如果检测到需要移动的旧配置,则会显示警告。 :问题:`2866`flask.RequestContext.copy()
在请求上下文副本中包含当前会话对象。 这可以防止session
指向过时的对象。 :问题:`2935`- 使用内置的 RequestContext,Host 标头中不可打印的 Unicode 字符将导致 HTTP 400 响应,而不是之前的 HTTP 500。 :pr:`2994`
send_file()
支持PathLike
对象,如 PEP 0519 中所述,以支持 Python 3 中的pathlib
。 :pr:`3059`send_file()
支持BytesIO
部分内容。 :问题:`2957`open_resource()
接受“rt”文件模式。 这仍然与“r”做同样的事情。 :问题:`3163`- 子类使用基类中设置的
MethodView.methods
属性。 :问题:`3138` Flask.jinja_options
是dict
而不是ImmutableDict
,以便于配置。 在创建环境之前,仍然必须进行更改。 :pr:`3190`- Flask 的
JSONMixin
用于请求和响应包装器已移至 Werkzeug。 使用具有 Flask 特定支持的 Werkzeug 版本。 这会将 Werkzeug 依赖项提高到 >= 0.15。 :问题:`3125` flask
命令入口点被简化以利用 Werkzeug 0.15 更好的重新加载器支持。 这会将 Werkzeug 依赖项提高到 >= 0.15。 :问题:`3022`- 支持以正斜杠结尾的
static_url_path
。 :问题:`3134` - 支持空
static_folder
,无需设置空static_url_path
。 :pr:`3124` jsonify()
支持dataclasses.dataclass
对象。 :pr:`3195`- 允许自定义用于路由的
Flask.url_map_class
。 :pr:`3069` - 开发服务器端口可以设置为 0,这会告诉操作系统选择一个可用的端口。 :问题:`2926`
cli.load_dotenv()
的返回值更符合文档。 如果未安装 python-dotenv,或者给定的路径不是文件,它将返回False
。 :问题:`2937`- 当未安装 Blinker 库时,信令支持具有
connect_via
方法的存根。 :pr:`3208` - 将
--extra-files
选项添加到flask run
CLI 命令以指定将在更改时触发重新加载器的额外文件。 :问题:`2897` - 允许从视图函数返回字典。 类似于返回字符串将产生
text/html
响应的方式,返回 dict 将调用jsonify
以产生application/json
响应。 :pr:`3111` - 蓝图有一个
cli
点击组,如app.cli
。 使用蓝图注册的 CLI 命令将在flask
命令下作为一个组使用。 :问题:`1357`。 - 当使用测试客户端作为上下文管理器 (
with client:
) 时,所有保留的请求上下文会在块退出时弹出,确保正确清理嵌套上下文。 :pr:`3157` - 当不支持视图返回类型时显示更好的错误消息。 :问题:`3214`
flask.testing.make_test_environ_builder()
已被弃用,取而代之的是一个新的类flask.testing.EnvironBuilder
。 :pr:`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`- 修复了 PEP451 导入加载器和 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 设置调试标志,而不总是根据环境变量覆盖它。 :pr:`2765` flask --version
输出 Werkzeug 的版本并简化 Python 版本。 :pr:`2825`send_file()
处理一个attachment_filename
,它是一个带有 UTF-8 编码字节的原生 Python 2 字符串(字节)。 :问题:`2933`- 为
HTTPException
注册的全能错误处理程序不会处理路由期间内部使用的RoutingException
。 这修复了 1.0 中引入的意外行为。 :pr:`2986` - 将
json
参数传递给app.test_client
不会推送/弹出额外的应用程序上下文。 :问题:`2900`
版本 1.0.2
发布 2018-05-02
- 通过在蓝图前缀和路由之间合并斜杠来修复更多向后兼容性问题。 :pr:`2748`
- 修复没有路由时
flask routes
命令的错误。 :问题:`2751`
版本 1.0.1
发布 2018-04-29
- 修复将部分注册(没有
__name__
)作为视图函数。 :pr:`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,点击 >= 5.1。 :问题:`2586`
- 从命令行运行 Flask 应用程序时跳过
app.run
。 这避免了一些令人困惑的调试行为。 - 将 JSONIFY_PRETTYPRINT_REGULAR 的默认值更改为
False
。jsonify()
默认返回紧凑格式,在调试模式下返回缩进格式。 :pr:`2193` Flask.__init__
接受host_matching
参数并将其设置在url_map
上。 :问题:`1559`Flask.__init__
接受static_host
参数并在定义静态路由时将其作为host
参数传递。 :问题:`1559`send_file()
支持 [X30X] 中的 Unicode。 :pr:`2223`- 将
_scheme
参数从url_for()
传递到handle_url_build_error()
。 :pr:`2017` add_url_rule()
接受provide_automatic_options
参数以禁用添加OPTIONS
方法。 :pr:`1489`MethodView
子类从基类继承方法处理程序。 :pr:`1936`- 在请求开始时打开会话时导致的错误由应用程序的错误处理程序处理。 :pr:`2254`
- 蓝图获得
json_encoder
和json_decoder
属性以覆盖应用程序的编码器和解码器。 :pr:`1898` Flask.make_response()
提升TypeError
而不是ValueError
对于不良响应类型。 已改进错误消息以描述类型无效的原因。 :pr:`2256`- 添加
routes
CLI 命令以输出应用程序上注册的路由。 :pr:`2259` - 当会话 cookie 域是裸主机名或 IP 地址时显示警告,因为这些在某些浏览器(例如 Chrome)中可能无法正常运行。 :pr:`2282`
- 允许 IP 地址作为确切的会话 cookie 域。 :pr:`2282`
- 如果通过
SERVER_NAME
检测到,则设置SESSION_COOKIE_DOMAIN
。 :pr:`2282` - 自动检测来自
FLASK_APP
的名为create_app
或make_app
的零参数应用程序工厂。 :pr:`2297` - 工厂函数不需要采用
script_info
参数来使用flask
命令。 如果它们采用单个参数或名为script_info
的参数,则将传递ScriptInfo
对象。 :pr:`2319` FLASK_APP
可以设置为应用程序工厂,如果需要,可以使用参数,例如FLASK_APP=myproject.app:create_app('dev')
。 :pr:`2326`FLASK_APP
可以指向未在可编辑模式下安装的本地包,尽管pip install -e
仍然是首选。 :pr:`2414`View
类属性provide_automatic_options
设置在as_view()
中,由add_url_rule()
检测。 :pr:`2316`- 错误处理将尝试为
blueprint, code
、app, code
、blueprint, exception
、app, exception
注册的处理程序。 :pr:`2314` Cookie
被添加到响应的Vary
标头,如果会话在请求期间被访问(并且没有被删除)。 :pr:`2288`test_request_context()
接受subdomain
和url_scheme
参数以在构建基本 URL 时使用。 :pr:`1621`- 默认设置 APPLICATION_ROOT 为
'/'
。 当它设置为None
时,这已经是隐式默认值。 - TRAP_BAD_REQUEST_ERRORS 在调试模式下默认启用。
BadRequestKeyError
在调试模式下有一条带有坏密钥的消息,而不是一般的坏请求消息。 :pr:`2348` - 允许使用
TaggedJSONSerializer
注册新标签以支持在会话 cookie 中存储其他类型。 :pr:`2352` - 仅当请求尚未推送到上下文堆栈时才打开会话。 这允许
stream_with_context()
生成器访问包含视图使用的相同会话。 :pr:`2354` - 为测试客户端请求方法添加
json
关键字参数。 这会将给定的对象转储为 JSON 并设置适当的内容类型。 :pr:`2358` - 将 JSON 处理提取到应用于
Request
和Response
类的 mixin。 这将is_json()
和get_json()
方法添加到响应中,使测试 JSON 响应变得更加容易。 :pr:`2358` - 删除了错误处理程序缓存,因为它会导致某些异常继承层次结构出现意外结果。 如果您想避免遍历 MRO,请为每个异常显式注册处理程序。 :pr:`2362`
- 修复感知的非 UTC 日期时间的错误 JSON 编码。 :pr:`2374`
- 即使
jinja_env
已经被访问,模板自动重新加载也会支持调试模式。 :pr:`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`- 支持将
EnvironBuilder
或dict
传递给test_client.open
。 :pr:`2412` - 如果安装了 python-dotenv,
flask
命令和Flask.run()
将从.env
和.flaskenv
文件加载环境变量。 :pr:`2416` - 将完整 URL 传递给测试客户端时,将使用 URL 中的方案而不是 PREFERRED_URL_SCHEME。 :pr:`2430`
Flask.logger
已被简化。LOGGER_NAME
和LOGGER_HANDLER_POLICY
配置被删除。 记录器始终命名为flask.app
。 该级别仅在第一次访问时设置,不会每次都检查Flask.debug
。 仅使用一种格式,根据Flask.debug
不会使用不同的格式。 不会删除处理程序,并且仅在尚未配置处理程序的情况下添加处理程序。 :pr:`2436`- 蓝图视图函数名称不能包含点。 :pr:`2450`
- 修复在某些情况下无效
Range
请求导致的ValueError
。 :问题:`2526` - 开发服务器默认使用线程。 :pr:`2529`
- 使用
silent=True
加载配置文件将忽略ENOTDIR
错误。 :pr:`2581` - 将
--cert
和--key
选项传递给flask run
以通过 HTTPS 运行开发服务器。 :pr:`2606` - 添加了 SESSION_COOKIE_SAMESITE 以控制会话 cookie 上的
SameSite
属性。 :pr:`2607` - 添加了
test_cli_runner()
以创建可以调用 Flask CLI 命令进行测试的 Click 运行程序。 :pr:`2636` - 默认情况下禁用子域匹配,设置 SERVER_NAME 不会隐式启用它。 可以通过将
subdomain_matching=True
传递给Flask
构造函数来启用它。 :pr:`2635` - 当它在应用程序中注册时,从蓝图
url_prefix
中删除一个尾部斜杠。 :pr:`2629` Request.get_json()
在silent
为真时解析失败,不会缓存结果。 :问题:`2651`Request.get_json()
不再接受任意编码。 传入的 JSON 应根据 RFC 8259 使用 UTF-8 进行编码,但 Flask 将自动检测 UTF-8、-16 或 -32。 :pr:`2691`- 添加了 MAX_COOKIE_SIZE 和
Response.max_cookie_size
以控制 Werkzeug 何时警告浏览器可能会忽略的大型 cookie。 :pr:`2693` - 更新了文档主题,使文档在小窗口中看起来更好。 :pr:`2709`
- 重写了教程文档和示例项目,以采用更结构化的方法来帮助新用户避免常见的陷阱。 :pr:`2676`
版本 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
的默认值存在,请使用该配置。 :issue:`2109`, :pr:`2152` - 如果在请求处理程序中引发了
BaseException
(例如KeyboardInterrupt
),则使用异常对象而不是None
调用ctx.auto_pop
。
版本 0.12
2016-12-21 发布,代号 Punsch
- cli 命令现在响应
--version
。 send_file
中文件类对象的 Mimetype 猜测和 ETag 生成已被删除。 :issue:`104`,:pr`1849`send_file
中的 Mimetype 猜测现在会大声失败并且不会回退到application/octet-stream
。 :pr:`1988`- 使
flask.safe_join
能够加入多个路径,如os.path.join
:pr:`1730` - 还原导致开发服务器崩溃而不是返回内部服务器错误的行为更改。 :pr:`2006`
- 为常规请求分派和错误处理程序正确调用响应处理程序。
- 默认情况下为应用记录器禁用记录器传播。
- 在
send_file
中添加对范围请求的支持。 app.test_client
包含预设默认环境,现在可以直接设置,而不是每个client.get
。- 修复在 PyPy3 下运行时的崩溃。 :pr:`1814`
版本 0.11
发布时间:2016-05-29,代号苦艾酒
- 添加了对将顶级数组序列化为
flask.jsonify()
的支持。 这在古老的浏览器中引入了安全风险。 - 添加 before_render_template 信号。
- 将
**kwargs
添加到flask.Test.test_client()
以支持向flask.Flask.test_client_class
的构造函数传递额外的关键字参数。 - 添加了控制 set-cookie 行为的
SESSION_REFRESH_EACH_REQUEST
配置键。 如果设置为True
一个永久会话将被刷新每个请求并延长它们的生命周期,如果设置为False
它只会在会话实际修改时被修改。 非永久会话不受此影响,并且在浏览器窗口关闭时将始终过期。 - 使 Flask 支持传入数据的自定义 JSON mimetypes。
- 添加了对从视图函数返回
(response, headers)
形式的元组的支持。 - 添加了
flask.Config.from_json()
。 - 添加了
flask.Flask.config_class
。 - 添加了
flask.Config.get_namespace()
。 - 模板不再在调试模式之外自动重新加载。 这可以使用新的
TEMPLATES_AUTO_RELOAD
配置键进行配置。 - 为 Python 3.3 的命名空间加载器中的限制添加了解决方法。
- 在使用 Python 3.3 的命名空间包时添加了对显式根路径的支持。
- 新增flask和
flask.cli
模块,通过click CLI系统启动本地调试服务器。 推荐使用旧的flask.run()
方法,因为它由于不同的设计而运行得更快、更可靠,并且还取代了Flask-Script
。 - 现在首先检查匹配特定类的错误处理程序,从而允许捕获作为 HTTP 异常子类的异常(在
werkzeug.exceptions
中)。 这使得扩展作者可以创建异常,默认情况下会导致他们选择的 HTTP 错误,但如果需要,可能会被自定义错误处理程序捕获。 - 添加了
flask.Config.from_mapping()
。 - 即使禁用了调试,Flask 现在也会默认记录日志。 日志格式现在是硬编码的,但可以通过
LOGGER_HANDLER_POLICY
配置键禁用默认日志处理。 - 删除了不推荐使用的模块功能。
- 添加了
EXPLAIN_TEMPLATE_LOADING
配置标志,启用后将指示 Flask 解释它如何定位模板。 这应该有助于用户在加载错误模板时进行调试。 - 按照为模板加载注册的顺序强制执行蓝图处理。
- 将测试套件移植到 py.test。
- 不推荐使用
request.json
以支持 [X34X]。 - 在 jsonify() 方法中添加“漂亮”和“压缩”分隔符定义。 在
JSONIFY_PRETTYPRINT_REGULAR=False
时通过删除分隔符后默认包含的不必要的空格来减少 JSON 响应大小。 - JSON 响应现在以换行符终止,因为 UNIX 文本文件以换行符结尾是惯例,并且当缺少该换行符时,某些客户端无法很好地处理。 这最初是作为 https://github.com/postmanlabs/httpbin/issues/168 的一部分出现的。 :pr:`1262`
- 如果用户使用小写版本
options
注册覆盖规则,则现在可以正确禁用自动提供的OPTIONS
方法。 :问题:`1288` flask.json.jsonify
现在支持datetime.date
类型。 :pr:`1326`- 不要将已经捕获的异常的异常信息泄露给上下文拆卸处理程序。 :pr:`1393`
- 允许自定义 Jinja 环境子类。 :pr:`1422`
- 更新了扩展开发指南。
flask.g
现在有pop()
和setdefault
方法。- 默认情况下为
flask.templating.render_template_string
开启自动转义。 :pr:`1515` flask.ext
现已弃用。 :pr:`1484`- 如果文件名在服务器操作系统上无效,
send_from_directory
现在会引发 BadRequest。 :pr:`1763` - 添加了
JSONIFY_MIMETYPE
配置变量。 :pr:`1728` - 拆卸处理期间的异常将不再留下糟糕的应用程序上下文。
- 修复了损坏的
test_appcontext_signals()
测试用例。 - 在
flask.helpers.find_package()
中引发AttributeError
并带有一条有用的消息,解释为什么在没有is_package()
方法的情况下使用 PEP 302 导入挂钩时会引发该问题。 - 修复了在输入要传递给拆卸处理程序的请求或应用程序上下文之前引发异常的问题。
- 修复了在请求绝对 URL 时从测试客户端的请求中删除查询参数的问题。
- 按预期将
@before_first_request
制成装饰器。 - 修复了发送带有名称的文件流时的 etags 错误。
- 修复了
send_from_directory
未正确扩展到应用程序根路径的问题。 - 更改了第一个请求处理程序之前的逻辑以在调用后翻转标志。 这将允许一些具有潜在危险但可能应该被允许的用途。
- 修复了
app.url_build_error_handlers
中的处理程序重新加注BuildError
时的 Python 3 错误。
版本 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 的内容长度标头。
tojson
过滤器现在不会转义 HTML5 解析器中的脚本块。- 模板中使用的
tojson
现在默认是安全的。 由于不同的转义行为,这是允许的。 - 如果您尝试在已使用的端点上注册新函数,Flask 现在将引发错误。
- 添加了围绕 simplejson 的包装器模块并添加了日期时间对象的默认序列化。 这允许更轻松地自定义 Flask 或任何 Flask 扩展如何处理 JSON。
- 删除了已弃用的内部
flask.session
模块别名。 使用flask.sessions
来获取会话模块。 这不要与flask.session
会话代理混淆。 - 现在可以在没有请求上下文的情况下呈现模板。 行为略有不同,因为
request
、session
和g
对象将不可用,并且不会调用蓝图的上下文处理器。 - config 对象现在可作为真正的全局模板使用,而不是通过上下文处理器使用,这使其即使在默认情况下在导入的模板中也可用。
- 添加了一个选项来生成非 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 以来它所做的更好的名称。request
、session
和g
现在也作为代理添加到模板上下文中,这使得它们在导入的模板中可用。 但是必须非常小心,因为宏之外的使用可能会导致缓存。- 如果通过代理异常,Flask 将不再调用错误的错误处理程序。
- 为 localhost 中的 chrome cookie 添加了一种解决方法,该解决方法无法按预期使用域名。
- 更改了从会话中选择 cookie 值的默认值的逻辑,以便更好地与 Google Chrome 配合使用。
- 添加了简化闪烁测试的
message_flashed
信号。 - 添加了对复制请求上下文的支持,以便更好地使用 greenlets。
- 删除了自定义 JSON HTTP 异常子类。 如果您依赖它们,您可以轻松地自己重新引入它们。 然而,强烈建议不要使用它们,因为界面存在缺陷。
- Python 要求已更改:现在需要 Python 2.6 或 2.7 以准备 Python 3.3 端口。
- 更改了拆卸系统如何通知异常的方式。 如果某些东西在错误处理过程中途处理异常,这现在更可靠。
- 调试模式下的请求上下文保留现在保留异常信息,这意味着拆卸处理程序能够区分错误和成功案例。
- 添加了
JSONIFY_PRETTYPRINT_REGULAR
配置变量。 - Flask 现在默认对 JSON 密钥进行排序,以免由于不同工作人员之间的不同哈希种子而破坏 HTTP 缓存。
- 添加了
appcontext_pushed
和appcontext_popped
信号。 - 现在,在选择要运行的默认端口时,内置的 run 方法会考虑
SERVER_NAME
。 - 添加
flask.request.get_json()
作为旧的flask.request.json
属性的替代。
0.9 版
2012-07-01 发布,代号金巴利
flask.Request.on_json_loading_failed()
现在默认返回 JSON 格式的响应。flask.url_for()
函数现在可以为生成的链接生成锚点。flask.url_for()
函数现在还可以显式生成特定于给定 HTTP 方法的 URL 规则。- 如果未明确设置,Logger 现在仅返回调试日志设置。
- 关闭请求时,取消注册 WSGI 环境和请求对象之间的循环依赖。 这意味着在响应返回到 WSGI 服务器后,environ
werkzeug.request
将是None
但优点是 CPython 不需要垃圾收集器来拆除请求,除非用户创建循环依赖本身。 - 会话现在存储在回调之后,因此如果会话有效负载存储在会话中,您仍然可以在请求后回调中修改它。
flask.Flask
类将尽可能避免导入提供的导入名称(必需的第一个参数),以使以编程方式构建 Flask 实例的工具受益。 Flask 类将回退到在具有自定义模块挂钩的系统上使用导入,例如 Google App Engine,或者当导入名称在 Python 2.7 之前的 zip 存档(通常是 .egg)中时。- 蓝图现在有一个装饰器,可以在应用范围内添加自定义模板过滤器,
flask.Blueprint.app_template_filter()
。 - Flask 和 Blueprint 类现在有一个非装饰器方法,用于在应用范围内添加自定义模板过滤器,
flask.Flask.add_template_filter()
和flask.Blueprint.add_app_template_filter()
。 flask.get_flashed_messages()
函数现在允许通过category_filter
参数在单独的块中呈现闪烁的消息类别。flask.Flask.run()
方法现在接受None
作为host
和port
参数,在None
时使用默认值。 这允许使用配置值调用运行,例如app.run(app.config.get('MYHOST'), app.config.get('MYPORT'))
,无论是否提供配置文件,行为都正确。flask.render_template()
方法现在接受可迭代的模板名称或单个模板名称。 以前,它只接受一个模板名称。 在可迭代对象上,找到的第一个模板被渲染。- 添加了
flask.Flask.app_context()
,其工作方式与请求上下文非常相似,但仅提供对当前应用程序的访问。 这也增加了对没有活动请求上下文的 URL 生成的支持。 - 视图函数现在可以返回一个元组,其中第一个实例是
flask.Response
的实例。 这允许从视图函数返回jsonify(error="error msg"), 400
。 Flask
和Blueprint
现在为子类提供get_send_file_max_age()
钩子,以覆盖使用flask.Flask.send_static_file()
时从 Flask 提供静态文件的行为(用于默认静态文件处理程序) 和send_file()
。 这个钩子提供了一个文件名,例如允许通过文件扩展名更改缓存控制。send_file
和静态文件的默认 max-age 可以通过新的SEND_FILE_MAX_AGE_DEFAULT
配置变量进行配置,该变量用于默认的get_send_file_max_age
实现。- 修复了会话实现中的一个假设,该假设可能会破坏使用外部存储的会话实现上的消息闪烁。
- 更改了函数的元组返回值的行为。 它们不再是响应对象的参数,它们现在具有定义的含义。
- 添加了
flask.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 内部服务器错误。 这是向后不兼容的更改。
- 应用程序现在不仅有资源和模块所在的根路径,而且还有一个实例路径,它是指定放置在运行时修改的文件(上传等)的位置。 此外,这在概念上只是实例依赖和版本控制之外,因此它是放置配置文件等的理想场所。
- 添加了
APPLICATION_ROOT
配置变量。 - 实现了
session_transaction()
以从测试环境轻松修改会话。 - 内部重构测试客户端。
APPLICATION_ROOT
配置变量以及SERVER_NAME
现在作为默认值被测试客户端正确使用。 - 添加了
flask.views.View.decorators
以支持更简单的可插拔(基于类)视图的装饰。 - 修复了测试客户端如果与“with”语句一起使用不会触发拆卸处理程序的执行的问题。
- 添加了对会话 cookie 参数的更精细控制。
- 如果未实现处理程序,对方法视图的 HEAD 请求现在会自动分派到
get
方法。 - 实现了虚拟
flask.ext
包以从中导入扩展。 - 异常上下文保留现在是 Flask 本身的一个组成部分,不再是测试客户端的一个组成部分。 这清理了一些内部逻辑并降低了单元测试中失控请求上下文的几率。
- 修复了 Jinja2 环境的
list_templates
方法在涉及蓝图或模块时不返回正确名称的问题。
版本 0.7.2
发布 2011-07-06
- 修复了 URL 处理器在蓝图上无法正常工作的问题。
版本 0.7.1
发布 2011-06-29
- 添加了破坏 2.5 兼容性的丢失的未来导入。
- 修复了蓝图的无限重定向问题。
版本 0.7
2011-06-28 发布,代号 Grappa
- 添加了
make_default_options_response()
,子类可以使用它来改变OPTIONS
响应的默认行为。 - 未绑定的本地人现在提出适当的
RuntimeError
而不是AttributeError
。 flask.send_file()
现在不推荐基于文件对象的 Mimetype 猜测和 etag 支持,因为它不可靠。 改为传递文件名或附加您自己的 etags 并手动提供正确的 mimetype。- 模块的静态文件处理现在需要明确提供静态文件夹的名称。 之前的自动检测不可靠,导致 Google App Engine 出现问题。 在 1.0 之前,旧行为将继续工作,但会发出依赖性警告。
- 修复了 Flask 在 jython 上运行的问题。
- 添加了一个
PROPAGATE_EXCEPTIONS
配置变量,可用于翻转异常传播的设置,该变量以前单独链接到DEBUG
,现在链接到DEBUG
或 [ X195X]。 - Flask 在内部不再依赖于通过
add_url_rule
函数添加的规则,现在也可以接受添加到 url 映射的常规 werkzeug 规则。 - 向烧瓶应用程序对象添加了
endpoint
方法,该方法允许使用装饰器将回调注册到任意端点。 - 使用 Last-Modified 进行静态文件发送,而不是 0.6 中错误引入的 Date。
- 添加了
create_jinja_loader
以覆盖加载器创建过程。 - 为
config.from_pyfile
实现了一个静默标志。 - 添加了
teardown_request
装饰器,用于无论是否发生异常都应在请求结束时运行的函数。after_request
的行为也已更改。 它现在不再在引发异常时执行。 - 实施
flask.has_request_context()
- 已弃用
init_jinja_globals
。 改写create_jinja_environment()
方法以实现相同的功能。 - 新增
flask.safe_join()
- 自动 JSON 请求数据解包现在查看 charset mimetype 参数。
- 如果会话中没有消息,请不要修改
flask.get_flashed_messages()
上的会话。 before_request
处理程序现在能够中止有错误的请求。- 无法定义用户异常处理程序。 这样,您可以从中央集线器为请求处理期间可能发生的某些错误(例如数据库连接错误、远程资源超时等)提供自定义错误消息。
- 蓝图可以提供蓝图特定的错误处理程序。
- 实现了通用的基于类的视图。
版本 0.6.1
发布 2010-12-31
- 修复了默认
OPTIONS
响应未公开Allow
标头中所有有效方法的问题。 - Jinja2 模板加载语法现在允许在模板加载路径前使用“./”。 以前这会导致模块设置出现问题。
- 修复了静态文件夹的模块子域设置被忽略的问题。
- 修复了一个安全问题,如果主机服务器是基于 Windows 的操作系统并且客户端使用反斜杠来转义公开文件的目录,则该问题允许客户端下载任意文件。
版本 0.6
2010-07-27 发布,代号威士忌
- 现在以与注册相反的顺序调用后请求函数。
- OPTIONS 现在由 Flask 自动实现,除非应用程序明确地将“OPTIONS”作为方法添加到 URL 规则中。 在这种情况下,不会启动自动 OPTIONS 处理。
- 如果模块没有静态文件夹,静态规则现在甚至就位。 这是为了帮助 GAE,如果它是 .yml 文件中映射的一部分,它将删除静态文件夹。
config
现在作为config
在模板中可用。- 上下文处理器将不再覆盖直接传递给渲染函数的值。
- 添加了使用新的
MAX_CONTENT_LENGTH
配置值限制传入请求数据的功能。 flask.Module.add_url_rule()
方法的端点现在是可选的,以与应用程序对象上的同名函数保持一致。- 添加了
flask.make_response()
函数,可简化在视图中创建响应对象实例的过程。 - 添加了基于闪光灯的信令支持。 此功能目前是可选的,应该由扩展和应用程序使用。 如果要使用它,请确保安装了 blinker。
- 重构了 URL 适配器的创建方式。 现在可以使用
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。 它现在由多个文件组成。
flask.send_file()
现在发出 etags 并能够进行内置的条件响应。- (暂时)放弃对压缩应用程序的支持。 这是一个很少使用的功能,并导致了一些令人困惑的行为。
- 添加了对每个包模板和静态文件目录的支持。
- 删除了对
create_jinja_loader
的支持,由于改进了模块支持,该支持在 0.5 中不再使用。 - 添加了一个帮助函数来公开任何目录中的文件。
版本 0.4
2010-06-18 发布,代号 Rakia
- 添加了从模块注册应用程序范围的错误处理程序的能力。
after_request()
处理程序现在也会在请求因异常而终止并且错误处理页面启动时被调用。- 测试客户端无法将请求上下文保留更长时间。 这也可用于触发不弹出请求堆栈进行测试的自定义请求。
- 因为 Python 标准库缓存记录器,记录器的名称现在是可配置的,以更好地支持单元测试。
- 添加了可以激活单元测试助手的
TESTING
开关。 - 如果启用调试,记录器现在切换到
DEBUG
模式。
版本 0.3.1
发布 2010-05-28
- 修复了
flask.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()
辅助功能。 add_url_rule()
现在也可以注册一个视图函数。- 重构内部请求调度。
- 服务器现在默认侦听 127.0.0.1 以修复 chrome 问题。
- 添加了外部 URL 支持。
- 添加了对
send_file()
的支持 - 模块支持和内部请求处理重构以更好地支持可插拔应用程序。
- 现在可以在每个会话的基础上将会话设置为永久的。
- 更好地报告丢失密钥的错误。
- 添加了对 Google Appengine 的支持。
版本 0.1
发布 2010-04-16
- 第一个公开预览版。